更新时间:2023-10-14 07:48:51
在要指定Assembly
生成类型的位置,这是创建自定义转换器的方式.我所有的自定义类型均源自IEntity
.您需要执行此操作,以便解串器知道何时将钩子插入自定义类.
Where you want to specify the Assembly
to generate the types, this is how you create a custom converter. All of my custom types derive from IEntity
. You need to do this so that the deserializer knows when hook into your custom class.
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
,然后将其分配给Conventions.CustomizeJsonSerializer
,然后在查询或加载之前将其应用于Raven.
If you are using RavenDB (like I am), create this CustomConverter
and then apply it to Raven before you query or load by assigning it to: Conventions.CustomizeJsonSerializer
.