2015-10-01 24 views
2

我使用DataContractJsonSerializer(我爲這個特定項目的唯一選擇),序列化類似這樣的一類包括[IgnoreDataMember]屬性:JSON 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]的方式嗎?

回答

0

令人驚訝的是,您需要將[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; } 
}