0
我有一個包含嵌套列表的對象以及使用自定義轉換器和.net的JavaScript序列化器從json反序列化它的方法。事情是這樣的:使用嵌套列表反序列化json對象
public class MyObject{
int TheID { get; set; }
public List<MyNestedObject1> ListOfMyNestedObject1 { get; set; }
public List<MyNestedObject2> ListOfMyNestedObject2 { get; set; }
public MyObject ObjectFromJson(string TheObjectInJson) {
JavaScriptSerializer TheSerializer = new JavaScriptSerializer();
TheSerializer.RegisterConverters(new JavaScriptConverter[] {
new MyObjectConvert()
});
TheSerializer.RegisterConverters(new JavaScriptConverter[] {
new MyNestedObject1Convert()
});
TheSerializer.RegisterConverters(new JavaScriptConverter[] {
new MyNestedObject2Convert()
});
//if I comment out the registrations of the converters, it works
//but I need the converters of the nested objects to kick in
return TheSerializer.Deserialize<MyObject>(TheObjectInJson);
}
}
JSON的轉換器嵌套對象都這個樣子:
public class MyNestedObject1Convert : JavaScriptConverter {
public override IEnumerable<Type> SupportedTypes {
get { return new Type[] { typeof(MyNestedObject1Convert) };
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{ //deserialization logic
return MyNestedObject1;}
}
而對於MyObject來轉換器看起來是這樣的:
public class MyObjectConvert : JavaScriptConverter {
public override IEnumerable<Type> SupportedTypes { get { return new Type[] { typeof(MyObjectConvert) }; }
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) {
int TheID;
MyObject TheObject = new MyObject();
int.TryParse(serializer.ConvertToType<string>(dictionary["TheID"]), out TheID))
TheObject.ID = TheID;
return TheObject;
}
}
現在調用函數接收json字符串並看起來返回的c#對象如下所示:
MyObject AMyObject = new MyObject();
MyObject TheMyObject = new MyObject();
TheMyObject = AMyObject.ObjectFromJson(JsonString);
當我運行此代碼時,返回的對象包含TheID,但嵌套對象爲null。我正在使用對象方法註冊轉換器,但我猜這不是做這件事的方法。如果我刪除了轉換器的註冊,該對象將包含嵌套對象,但是轉換器不會踢入。
我需要更改哪些內容?注意:我不打算使用另一個庫,只是爲了使本地解串器工作。
感謝您的建議。
你有沒有爲自己的`自定義轉換器`做任何事情,而沒有在這麼問? – 2011-12-16 20:58:02