当前位置:  开发笔记 > 编程语言 > 正文

将ISerializable与DataContractSerializer一起使用时,如何阻止序列化程序输出类型信息?

如何解决《将ISerializable与DataContractSerializer一起使用时,如何阻止序列化程序输出类型信息?》经验,为你挑选了0个好方法。

为了更好地控制序列化,我将一个类从[DataContract]转换为[Serializable],实现了GetObjectData和特殊的反序列化构造函数.当我这样做时,现在发出的XML具有应用于所有元素的类型信息.我不想要这些多余的信息,我想知道如何通知序列化程序不输出它.

以下是使用[DataContract]的示例代码:

[DataContract(Namespace = "")]
class Test 
{
    public Test() { }
    [DataMember]
    public Nullable NullableNumber = 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 Nullable NullableNumber = 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

它为什么这样做?我怎么阻止它这样做?

谢谢!

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有