Newtonsoft json converter - 无法序列化重写类的所有属性

时间:2013-11-20 21:43:42

标签: c# json json.net

我写了一个解释我问题的小例子。

我有主要课程: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());

我的Json中没有ID2,我只有基本属性。知道如何让它发挥作用吗?

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

试试这个:

[Serializable]
public class MainClass
...

[Serializable]
public class LeafClass : MainClass
...

...编辑

您正在传入一个从未设置过ID的MainClass实例,但您正在为该值分配ID。 ID为null。

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) };