.net 使用转换器反序列化json

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

给定要转换的对象,可以使用
ToObject()
来获取转换后的对象。在本例中,您希望将数组中的第二项转换为
元数据
对象

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();
    }
}
公共类DeltaEntryConverter:JsonConverter
{
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
var arr=(JArray)序列化程序。反序列化(读取器);
返回新三角洲
{
Path=(字符串)arr[0],
MetaData=arr[1]。ToObject(),
};
}
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
抛出新的NotImplementedException();
}
公共覆盖布尔CanConvert(类型objectType)
{
抛出新的NotImplementedException();
}
}

我刚刚注意到有一种更好的方法可以转换为
元数据
对象。使用
ToObject()
方法。它确实更可读,但在内部工作原理相同,对吗?是的,它应该是相同的。不过,作为中间步骤,不需要将对象转换回字符串。