2013-11-20 25 views
0

我寫了一個小例子來解釋我的問題。Newtonsoft json轉換器 - 無法序列化覆蓋類的所有屬性

我有主類:MainClass

public class MainClass 
{ 
    public string ID 
    { 
     get; 
     set; 
    } 
} 

而且我有葉類:LeafClass

public class LeafClass : MainClass 
{ 
    public string ID2 
    { 
     get; 
     set; 
    } 

    #region Constructor 
    public LeafClass(MainClass oMainClass) 
    { 
     this.ID = oMainClass.ID; 
     this.ID2 = "my 2nd ID"; 
    } 
    #endregion 
} 

在我的主:

MainClass MC = new MainClass(); 
LeafClass[] LF = {new LeafClass(MC), new LeafClass(MC)}; 
JsonSerializer serializer = new JsonSerializer(); 
serializer.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); 
serializer.Converters.Add(new Newtonsoft.Json.Converters.KeyValuePairConverter()); 
string JsonData = JsonConvert.SerializeObject(LF, serializer.Converters.ToArray()); 

我沒有我在ID2我的Json,我只有基本屬性。任何想法如何使其工作?

+0

什麼是'Leaf'?請提供[正確示例](http://sscce.org/)。 –

+0

等等... LeafClass如何能夠訪問this.ID? – Scottie

+0

我忘了重寫... – billybob

回答

1

我發現瞭如何解決我的問題。

我必須在每個屬性上的LeafClass [JsonObject(MemberSerialization.OptIn)][JsonProperty]上添加此裝飾器。

[JsonObject(MemberSerialization.OptIn)] 
public class LeafClass : MainClass 
{ 
    [JsonProperty] 
    public string ID2 
    { 
     get; 
     set; 
    } 

    #region Constructor 
    public LeafClass(MainClass oMainClass) 
    { 
     this.ID = oMainClass.ID; 
     this.ID2 = "my 2nd ID"; 
    } 
    #endregion 
} 
0

試試這個:

​​

編輯...

您傳遞從未設置ID MainClass的實例,但你到價值分配ID。 ID爲空。

public LeafClass(MainClass oMainClass) 
{ 
    this.ID = oMainClass.ID; // <-- oMainClass.ID is null because you never set it in oMainClass 
    this.ID2 = "my 2nd ID"; 
} 

試試這個:

MainClass MC = new MainClass(); 
MC.ID = "ABC"; 
LeafClass[] LF = { new LeafClass(MC), new LeafClass(MC) };