2011-11-07 44 views
4

我们有一个包含所有数据合同的合同。我们使用JSON.net将我们的数据合约序列化为json。如何在JSON.Net中序列化和反序列化时从类型名称中省略程序集名称?

JSON.Net在序列化的$ type属性中同时添加类型名称和程序集名称。由于我们所有的数据合约都在同一个程序集中,并且始终在当前应用程序域中加载,所以我们应该可以忽略它。

我们该如何做到这一点?

感谢

+0

你是如何调用序列化? –

回答

0

我想也许标记的类与JsonObjectAttribute

[DataContract] 
[JsonObject("")] 
public class MyContractClass { ... } 

这应该覆盖的事实,这也是一个DataContract。

5

您可以在您的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); 
} 
相关问题