簡體   English   中英

當對象從列表繼承時序列化對象

[英]Serialize object when the object inherits from list

[DataContract]
public class A : List<B>
{
    [DataMember]
    public double TestA { get; set; }
}

[DataContract]
public class B
{
    [DataMember]
    public double TestB { get; set; }
}

使用上面的模型,我嘗試序列化以下對象:

List<A> list = new List<A>()
{
    new A() { TestA = 1 },
    new A() { TestA = 3 }
};

json = JsonConvert.SerializeObject(list);
//json: [[],[]]

TestA中我的兩個值在TestA 這可能是從這個線程 (XML)重復,但我想知道是否沒有選項通過設置一些JSON序列化選項來包含這些值?

注意:在A類中創建屬性List<B>而不是繼承對我來說是沒有選擇的。

根據上面的評論(謝謝!)有兩種方法可以獲得正確的結果:

  • 實現自定義JsonConverter參見此處
  • Workarround:在類中創建一個返回項的屬性( 參見此處

無論如何,從List<T>繼承很少是一個很好的解決方案( 見這里

我已經嘗試過workarround:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class A : List<B>
{
    [JsonProperty]
    public double TestA { get; set; }

    [JsonProperty]
    public B[] Items
    {
        get
        {
            return this.ToArray();
        }
        set
        {
            if (value != null)
                this.AddRange(value);
        }
    }
}

public class B
{
    public double TestB { get; set; }
}

這適用於序列化和反序列化。 要點: Items必須是BArray且沒有List<B> 否則反序列化不適用於Items

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM