我们有一个包含所有数据合同的合同。我们使用JSON.net将我们的数据合约序列化为json。如何在JSON.Net中序列化和反序列化时从类型名称中省略程序集名称?
JSON.Net在序列化的$ type属性中同时添加类型名称和程序集名称。由于我们所有的数据合约都在同一个程序集中,并且始终在当前应用程序域中加载,所以我们应该可以忽略它。
我们该如何做到这一点?
感谢
我们有一个包含所有数据合同的合同。我们使用JSON.net将我们的数据合约序列化为json。如何在JSON.Net中序列化和反序列化时从类型名称中省略程序集名称?
JSON.Net在序列化的$ type属性中同时添加类型名称和程序集名称。由于我们所有的数据合约都在同一个程序集中,并且始终在当前应用程序域中加载,所以我们应该可以忽略它。
我们该如何做到这一点?
感谢
我想也许标记的类与JsonObjectAttribute
[DataContract]
[JsonObject("")]
public class MyContractClass { ... }
这应该覆盖的事实,这也是一个DataContract。
您可以在您的JsonSerializerSettings
中使用Binder
属性。
本博客文章(由库的作者)介绍的步骤:http://james.newtonking.com/archive/2011/11/19/json-net-4-0-release-4-bug-fixes.aspx
总之,你创建SerializationBinder
自定义类派生并重写两个方法:
BindToName(Type serializedType, out string assemblyName, out string typeName)
BindToType(string assemblyName, string typeName)
你在这些方法中放置的逻辑会给你直接的控制ol如何在$type
字段中将类型名称转换为字符串表示形式,以及如何在运行时定位$type
的值。
你的情况,想省略大会名字,你也许可以这样做:
public override void BindToName(
Type serializedType, out string assemblyName, out string typeName)
{
assemblyName = null;
typeName = serializedType.FullName;
}
public override Type BindToType(string assemblyName, string typeName)
{
return Type.GetType(typeName);
}
你是如何调用序列化? –