我又一个类FileInfo保存文件信息的,大致如下
[Serializable]
public class FileInfo : ISerializable
{
public string FileName
{
get;
set;
} private byte[] _body;
public byte[] Body
{
get
{
if (_body == null)
{
_body = System.IO.File.ReadAllBytes(Source);
} return _body;
}
} public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("FileName", FileName + "@@@"); //@@@用于验证这行是否被执行
info.AddValue("Body", Convert.ToBase64String(Body));
}
}这个类有两个属性,文件名FileName和文件体Body,为了存放二进制文件Body的类型是byte[]。
我的目的是可以通过WebServices把文件发布出去,其中byte[]的Body不能被自动序列化,所以我实现了GetObjectData,其中把Body做了下Base64。然而调用webservices得到的结果只有FileName一个值并无Body,并且FileName后面没有我有意加的“@@@”(见前面的代码),说明GetObjectData并未被执行我又用XmlSerializer方式序列化,也是得不到Body,也没有“@@@”
用BinaryFormatter方式序列化,这次得到了Body,并且有“@@@”,说明执行了GetObjectData()
我想知道为什么会有这样的差异?烦劳指点,感激涕零!
[Serializable]
public class FileInfo : ISerializable
{
public string FileName
{
get;
set;
} private byte[] _body;
public byte[] Body
{
get
{
if (_body == null)
{
_body = System.IO.File.ReadAllBytes(Source);
} return _body;
}
} public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("FileName", FileName + "@@@"); //@@@用于验证这行是否被执行
info.AddValue("Body", Convert.ToBase64String(Body));
}
}这个类有两个属性,文件名FileName和文件体Body,为了存放二进制文件Body的类型是byte[]。
我的目的是可以通过WebServices把文件发布出去,其中byte[]的Body不能被自动序列化,所以我实现了GetObjectData,其中把Body做了下Base64。然而调用webservices得到的结果只有FileName一个值并无Body,并且FileName后面没有我有意加的“@@@”(见前面的代码),说明GetObjectData并未被执行我又用XmlSerializer方式序列化,也是得不到Body,也没有“@@@”
用BinaryFormatter方式序列化,这次得到了Body,并且有“@@@”,说明执行了GetObjectData()
我想知道为什么会有这样的差异?烦劳指点,感激涕零!
2、还是只有BinaryFormatter能够调用GetObjectData,但是发现webService会自动对byte[]属性进行base64编码,大出意外。
现在我把对ISerializable 的继承取消了,GetObjectData自然也取消,完全靠webService自动的序列化我的对象。
这中间还是有一些不解,放后面研究明白了再贴出来