8

Json.NET を使用してサブクラスをシリアル化しようとしています。結果の json には、スーパークラスのシリアル化されたプロパティが含まれますが、サブクラス オブジェクトのプロパティは含まれません。

これはSO で見つけた問題に関連しているようです。しかし、a を書かなければならないのJsonConverterはやり過ぎのようです。

サブクラスの例:

public class MySubclass : List<string>
{
    public string Name { get; set; }
}

シリアル化のサンプル:

MySubclass myType = new MySubclass() { Name = "Awesome Subclass" };
myType.Add("I am an item in the list");

string json = JsonConvert.SerializeObject(myType, Newtonsoft.Json.Formatting.Indented);

結果のjson:

[
  "I am an item in the list"
]

私は次のような結果になると予想していました:

{
    "Name": "Awesome Subclass",
    "Items": [
        "I am an item in the list"
    ]
}

おそらく、シリアル化するときに正しい構成を使用していないだけです。誰にも提案はありますか?

4

2 に答える 2

5

ドキュメントによると:

.NET リスト (から継承する型IEnumerable) と .NET 配列は JSON 配列に変換されます。JSON 配列は値の範囲のみをサポートし、プロパティはサポートしないため、 .NET コレクションで宣言された追加のプロパティとフィールドはシリアル化されません

したがって、 をサブクラス化せずList<T>に、2 つ目のプロパティを追加してください。

public class MyClass 
{
    public List<string> Items { get; set; }
    public string Name { get; set; }

    public MyClass() { Items = new List<string>(); }
}
于 2012-07-06T18:50:29.600 に答える
2

これが私の考えです。期待される結果は、次のようなクラスとより一致すると思います。

public class MyClass 
{
    public string Name { get; set; }
    public List<string> Items { get; set; }
}

on にも onにもItems プロパティがないItemsため、シリアライズされた結果に要素が表示されることは期待できません。MySubclass : List<string>ListMySubclass

あなたのクラスは実際には文字列のリストであるため、メソッドは単にオブジェクトを反復処理し、文字列のリストをシリアル化しているとMySubclass推測します (ここでは推測しています) 。SerializeObject

于 2012-07-06T18:49:59.057 に答える