1

一部のjsonを.netクラスに逆シリアル化しようとしています:

{"reset": true, "cursor": "xxxx", "has_more": true, "entries": [
    ["/ict", {
        "revision": 22,
        "rev": "16010e2631",
        "thumb_exists": false,
        "bytes": 0,
        "modified": "Sat, 11 Sep 2010 00:11:24 +0000",
        "path": "/ICT",
        "is_dir": true,
        "size": "0 bytes"
    }],
    ["/ict/docs", {
        "revision": 1772,
        "rev": "6ec010e2631",
        "thumb_exists": false,
        "bytes": 0,
        "modified": "Wed, 15 Sep 2010 09:55:24 +0000",
        "path": "/ICT/Docs",
        "is_dir": true,
        "size": "0 bytes"
    }]
]}

エントリ部分に問題があります。各配列は文字列で始まりますが、キーがありません。逆シリアル化するクラスは次のようになります。

[JsonConverter(typeof(DeltaEntryConverter))]  
public class DeltaEntry
{                
    public string Path { get; set; }        
    public MetaData MetaData { get; set; }
}

jsonConverter を使用することを考えていましたが、コンバーターを使用する場合、オブジェクト (各配列の 2 番目のインデックス) をメタデータ クラスに逆シリアル化する方法がわかりません。

4

1 に答える 1

2

変換するオブジェクトを指定すると、 を使用しToObject<T>()て変換されたオブジェクトを取得できます。あなたの場合、配列の 2 番目の項目をMetaDataオブジェクトに変換します。

public class DeltaEntryConverter : JsonConverter
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var arr = (JArray)serializer.Deserialize(reader);
        return new DeltaEntry
        {
            Path = (string)arr[0],
            MetaData = arr[1].ToObject<MetaData>(),
        };
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert(Type objectType)
    {
        throw new NotImplementedException();
    }
}
于 2013-07-29T00:46:51.757 に答える