为了更好地控制序列化,我将一个类从[DataContract]转换为[Serializable],实现了GetObjectData和特殊的反序列化构造函数.当我这样做时,现在发出的XML具有应用于所有元素的类型信息.我不想要这些多余的信息,我想知道如何通知序列化程序不输出它.
以下是使用[DataContract]的示例代码:
[DataContract(Namespace = "")] class Test { public Test() { } [DataMember] public NullableNullableNumber = 7; [DataMember] public int Number = 5; public static void Go() { var test = new Test(); var dcs = new DataContractSerializer(typeof(Test)); using (var s = new StreamWriter("test.xml")) { dcs.WriteObject(s.BaseStream, test); } } }
这将输出以下XML(请注意Nullable Number和Number上没有类型信息 - 这是所需的输出):
7 5
如果我修改上面的代码如下(添加[Serializable],:ISerializable和两个序列化方法):
[Serializable] class Test : ISerializable { public Test() { } public NullableNullableNumber = 7; public int Number = 5; public static void Go() { var test = new Test(); var dcs = new DataContractSerializer(typeof(Test)); using (var s = new StreamWriter("test.xml")) { dcs.WriteObject(s.BaseStream, test); } } public Test(SerializationInfo info, StreamingContext context) { NullableNumber = info.GetInt32("NullableNumber"); Number = info.GetInt32("Number"); } public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("NullableNumber", NullableNumber); info.AddValue("Number", Number); } }
它现在发出以下XML.注意添加到每个元素的类型信息(i:type ="x:int").
7 5
它为什么这样做?我怎么阻止它这样做?
谢谢!