我不相信有一个简单的方法来调试序列化,但事实上,没有魔法:序列化是一个相当简单的过程,你可以自己做。
作为记录,我正在使用 DataContract Serializer。
这是序列化/反序列化的代码
public static string Serialize(object obj) {
using(MemoryStream memoryStream = new MemoryStream())
using(StreamReader reader = new StreamReader(memoryStream)) {
DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
serializer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
return reader.ReadToEnd();
}
}
public static object Deserialize(string xml, Type toType) {
using(Stream stream = new MemoryStream()) {
byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
stream.Write(data, 0, data.Length);
stream.Position = 0;
DataContractSerializer deserializer = new DataContractSerializer(toType);
return deserializer.ReadObject(stream);
}
}
它有时会错过一些属性
基本上,如果在序列化过程中出现问题,序列化程序将抛出一个 SerializationException(带有详细信息)。在您的情况下(属性仍然为空或等于默认值),听起来您忘记了一些属性。
好吧,在没有任何代码的情况下为您提供更多帮助并不容易,但请注意 datacontractserializer 功能(请参阅此处)。
特别是当我通过网络发送自定义对象列表时。它始终返回单个对象的值。
尝试重现它并为此编写单元测试。没有随机错误,只有非常具体的导致错误的场景。