用转换器反序列化json

时间:2013-07-29 00:18:48

标签: .net json json.net converter json-deserialization

我正在尝试将一些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,但如果我使用转换器,我不确定如何将对象(每个数组中的第二个索引)反序列化为元数据类。

1 个答案:

答案 0 :(得分:2)

给定要转换的对象,可以使用ToObject<T>()来获取转换后的对象。在您的情况下,您希望将数组中的第二项转换为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();
    }
}