JSON DataContractJsonSerializer IgnoreDataMember不起作用

时间:2015-10-01 16:36:53

标签: json serialization

我使用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]的方式做错了吗?

1 个答案:

答案 0 :(得分:0)

令人惊讶的是,您需要将 module.exports = env => { return { entry: env.site + '/src/index.js', output: { filename: env.site + '.js', path: path.resolve(__dirname, 'build') } } } 属性添加到您的班级。否则,[DataContract]并不总是正确解释DataContractJsonSerializer[IgnoreDataMember]属性。

查看您的示例,正​​确的版本是:

[DataMember]