gpt4 book ai didi

json.net - 如何在 RavenDB 中使用自定义 JSON.NET 转换器从动态 DLL 反序列化为类型?

转载 作者:行者123 更新时间:2023-12-02 01:57:55 27 4
gpt4 key购买 nike

我的 RavenDB 对象是根据动态加载的 DLL 中的类型创建的。我无法将 DLL 加载到当前 AppDomain 的执行上下文中,因此 JSON 反序列化程序无法找到类型。

我将如何使用 Custom Converter在我的运行时加载程序集中使用类型?

注意 I tried通过 AppDomain 从另一个域提供 DLL,但后来引起了冲突。虽然它解决了那个问题,但我现在需要确保我的所有对象都是从动态加载的程序集中的类型创建的。

最佳答案

在您要指定程序集 以生成类型的地方,这就是您创建自定义转换器的方式。我的所有自定义类型都派生自 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 .

关于json.net - 如何在 RavenDB 中使用自定义 JSON.NET 转换器从动态 DLL 反序列化为类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com