2013-07-29 64 views
1

我試圖反序列化JSON一些到.NET類:反序列化JSON與轉換器

{"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,但我不知道如何反序列化對象(每個陣列中的第二個索引)元數據I類使用轉換器。

回答

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(); 
    } 
} 
+0

太棒了,效果很好。謝謝! – Jesse

+0

我剛剛注意到有一個更好的方法來轉換爲'MetaData'對象。使用'ToObject ()'方法。 –

+0

確實更具可讀性,但內部它的工作原理是一樣的嗎? – Jesse