serialiseするとき、私はClassNameを_CurrentClassNameプロパティにオブジェクトに書き込みます。 JSON.Netライブラリでjsonを読むとき、このプロパティからオブジェクトを値に変更する必要があります。オブジェクト型が推測されており、オブジェクトがインスタンス化された後JSON.Netでデシリアライズするとき、またはデフォルトのシリアライザを呼び出すときに、オブジェクトタイプを別のものに変更する方法はありますか?
{
"Field1": 0,
"Field2": "34",
"_CurrentClassName": "MyCustomClass"
}
class CustomJsonConverter : JsonConverter
{
...
public override bool CanConvert(Type objectType)
{
return objectType.IsClass;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var value = existingValue;
if (reader.TokenType == JsonToken.Null)
{
return null;
}
else if (reader.TokenType == JsonToken.StartObject)
{
JObject jObject = JObject.Load(reader);
JToken jToken;
if (jObject.TryGetValue("_CurrentClassName", out jToken))
{
var t = jToken.Value<string>();
Type tt = Type.GetType(objectType.Namespace + "." + t);
value = Activator.CreateInstance(tt);
return value;
}
}
return serializer.Deserialize(reader);
}
...
}
[Json.Net多型子オブジェクトの型のシリアル化](https://stackoverflow.com/questions/29528648/json-net-serialization-of-type)の回答と同様のことができます - 多型子オブジェクトあり/ 29531372#29531372)。 – dbc
ありがとうございます。同様に、私は "ハード"タイプを使用することはできません、私のCanConvertは次のようになります: public override bool CanConvert(type objectType) { return objectType.IsClass; } – ndbnndbn
あなたはそのプロパティ名と構文に結婚しているのですか、これを処理するためにJson.Netを使用するだけですか? –