を指定しAssembly
て型を生成する場合は、次のようにしてカスタム コンバーターを作成します。私のカスタム型はすべて から派生していIEntity
ます。これを行う必要があるのは、カスタム クラスにいつフックするかをデシリアライザーが認識できるようにするためです。
public class DynamicAssemblyJsonConverter : JsonConverter
{
private Assembly dynamicAssembly = null;
public DynamicAssemblyJsonConverter(Assembly dynamicAssembly)
{
this.dynamicAssembly = dynamicAssembly;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jObject = JObject.Load(reader);
var typeName = jObject["$type"].Value<string>().Split(',')[0];
var target = dynamicAssembly.CreateInstance(typeName);
serializer.Populate(jObject.CreateReader(), target);
return target;
}
public override bool CanConvert(Type objectType)
{
return objectType is IEntity;
}
}
(私のように) RavenDB を使用している場合は、これCustomConverter
を作成し、それを Raven に適用してから、次のように割り当ててクエリまたはロードしますConventions.CustomizeJsonSerializer
。