0

私はJson.NETを使用しています(DataContractJsonSerializerも試しました)が、シリアル化/逆シリアル化するときに名前付き配列を処理する方法がわかりませんか?

私の c# クラスは次のようになります。

public class Subheading
{
    public IList<Column> columns { get; set; }

    public Subheading()
    {
        Columns = new List<Column>();
    }

}

public class Column
{
    public IList<Link> links { get; set; }

    public Column()
    {
        Links = new List<Link>();
    }

}

public class Link
{
    public string label { get; set; }
    public string url { get; set; }

}

生成される Json は次のようなものです。

{
          "columns": [
            {
              "**links**": [
                {
                  "label": "New Releases",
                  "url": "/usa/collections/sun/newreleases"
                },
               ...
              ]
            },
           ]
    ...
}

このようにするために「リンク」を緩めるにはどうすればよいですか?:

{
      "columns": [
          [
            {
              "label": "New Releases",
              "url": "/usa/collections/sun/newreleases"
            },
           ...
          ],
          ...
      ]
...
}
4

1 に答える 1

0

唯一の解決策はカスタムだと思いますJsonConverter。コードは次のようになります。

class SubheadingJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        // tell Newtonsoft that this class can only convert Subheading objects
        return objectType == typeof(Subheading);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // you expect an array in your JSON, so deserialize a list and
        // create a Subheading using the deserialized result
        var columns = serializer.Deserialize<List<Column>>(reader);

        return new Subheading { column = columns };
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // when serializing "value", just serialize its columns
        serializer.Serialize(writer, ((Subheading) value).columns);
    }
}

Subheading次に、クラスをJsonConverterAttribute:で飾る必要があります。

[JsonConverter(typeof(SubheadingJsonConverter)]
public class Subheading
{
    // ...
}
于 2012-08-14T13:02:11.967 に答える