私は、ネストされたリストを含むオブジェクトと、カスタムコンバーターと.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です。私はオブジェクトメソッドのコンバータを登録していますが、私はそれを行う方法ではないと推測しています。コンバーターの登録を削除すると、オブジェクトにはネストされたオブジェクトが含まれますが、コンバーターは起動しません。
変更する必要があるのは何ですか?注:私はネイティブのデシリアライザを動作させるために、別のライブラリを使用するつもりはありません。
ご意見ありがとうございます。
あなたはあなたの 'custom converter'のために何もしていませんか? –
@ L.B:質問は、それを必要とする他の人のための回答でもあります。それがSOのコンセプトを魅力的にするものです。 – frenchie
「質問は、あまりにも必要となる他の人のための回答である」という意味です。 :) –