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

4

1 回答 1

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();
    }
}
于 2013-07-29T00:46:51.757 回答