C# Newtonsoft json转换器-无法序列化重写类的所有属性

C# Newtonsoft json转换器-无法序列化重写类的所有属性,c#,json,json.net,C#,Json,Json.net,我写了一个小例子来解释我的问题 我有主课:MainClass public class MainClass { public string ID { get; set; } } public class LeafClass : MainClass { public string ID2 { get; set; } #region Constructor public

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

我有主课:
MainClass

public class MainClass
{
    public string ID
    {
        get;
        set;
    }
}
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
}
我有叶类:
leakclass

public class MainClass
{
    public string ID
    {
        get;
        set;
    }
}
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,只有基本属性。你知道如何让它工作吗?

试试这个:

[Serializable]
public class MainClass
...

[Serializable]
public class LeafClass : MainClass
...
编辑

您正在传入一个从未设置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";
}

我发现了如何解决我的问题

我必须在每个属性的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
}

什么是
Leaf
?请提供一个。等等。。。LeafClass是如何访问这个.ID的?我忘记重写了…不过,什么是新的Leaf()?