我对来自MSDN的序列化样本感到困惑。
我的困惑在于GetObjectData方法(在序列化期间调用),方法是
我调试似乎(2)是正确的 - 如果使用GetObjectData方法,没有字段/属性数据被序列化?那是对的吗? (我不是专家,只想在这里确认,但对自己100%有信心。)
答案 0 :(得分:2)
如果您实施ISerializable
,则您对所有数据(即问题中的情景“2”)负有责任;没有额外的自动序列化。你的要求是什么?像DataContractSerializer
这样的东西可以基于属性,允许你装饰常规字段和你的自定义属性(有一些逻辑)并正确地序列化它们。如果你需要二进制(用于空间等),那么可能会考虑像protobuf-net这样的东西,它们在节省空间的同时将它们混合在一起。
那么:你的要求是什么?
数据合同示例:
[DataContract]
public class Foo {
[DataMember]
public int Bar {get;set;} // simple data
[DataMember]
private string DoSomeThinking {
get {.... serialize the complex data ....}
set {.... deserialize the complex data ....}
}
}
答案 1 :(得分:2)
如果实现ISerializable,则必须使用AddValue将所有数据(至少包括反序列化所需的数据)添加到SerializationInfo中。
答案 2 :(得分:2)
我不确定你想要实现什么,但让C#为你做的工作并不容易:
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace Test
{
[Serializable]
public class TestObject
{
private String name;
private String note;
#region Getters/setters
public String Name
{
get { return name; }
set { name = value; }
}
public String Note
{
get { return note; }
set { note = value; }
}
#endregion
}
}
现在您可以使用XmlSerializer或BinaryFormatter来(de)序列化对象