【问题标题】:JSON DataContractJsonSerializer IgnoreDataMember not workingJSON DataContractJsonSerializer IgnoreDataMember 不起作用
【发布时间】:2015-10-01 16:36:52
【问题描述】:

我正在使用 DataContractJsonSerializer(我对这个特定项目的唯一选择)来序列化一个与此类似的类,其中包括 [IgnoreDataMember] 属性:

 public class TestClass
{
    public int Test1 { get; set; }
    public int Test2 { get; set; }
    [IgnoreDataMember]
    public int Test3 { get; set; }
}

我的序列化代码直接取自 MS 的示例页面:

TestClass MyTest = new TestClass();
MyTest.Test1 = 1;
MyTest.Test2 = 2;
MyTest.Test3 = 3;

MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(TestClass));
ser.WriteObject(stream1, MyTest);
stream1.Position = 0;
StreamReader sr = new StreamReader(stream1);
string sContent = sr.ReadToEnd();

但我得到的输出总是包含Test3 属性:

{"Test1":1,"Test2":2,"Test3":3}

如果我这样定义类:

 [DataContract]
    public class TestClass
    {
        [DataMember]
        public int Test1 { get; set; }
        [DataMember]
        public int Test2 { get; set; }
        public int Test3 { get; set; }
    }

我得到这样的正确输出:

{"Test1":1,"Test2":2}

我真正想要序列化的类有几十个属性,我只想忽略其中的一小部分,所以我更愿意使用[IgnoreDataMember] 而不是[DataContaract][DataMember]

我使用[IgnoreDataMember] 的方式有问题吗?

【问题讨论】:

    标签: json serialization


    【解决方案1】:

    令人惊讶的是,您需要将[DataContract] 属性添加到您的类中。否则,DataContractJsonSerializer 并不总是正确解释 [IgnoreDataMember][DataMember] 属性。

    看你的例子,正确的版本是:

    [DataContract] // Add this
    public class TestClass
    {
        public int Test1 { get; set; }
        public int Test2 { get; set; }
        [IgnoreDataMember]
        public int Test3 { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多