2013-03-13 61 views
3

我有一个ASP.NET Web API项目,由于它不支持2个主体参数,我使用JObject参数,然后从中提取实际参数。喜欢这个。访问ASP.NET Web API中的默认JSON.NET序列化程序

Public bool mymethod(JObject data){ 
    myclassA a = data["a"].toObject<myclassA>(); 
    myclassA b = data["b"].toObject<myclassB>(); 
} 

但是2类类型实现了ISerializable,我需要JSON.NET来忽略它。我已经设置了默认的JSON.NET序列化器来做到这一点,并且在序列化自动完成时工作正常。

但我需要获取对JSON.NET序列化器中内置的引用,以便我可以在上面的代码中使用它。

myclassA b = data["b"].toObject<myclassB>(defaultSerializer); 

当前我创建了一个新的JSON.NET序列化实例并使用它。但是,我怎样才能获得对asp.net WEB API中默认的序列化程序的引用?

此外,我不能改变类类型中的任何东西,因为这是我转换为web api的遗留应用程序。谢谢。

回答

8

试试这个:

JsonSerializer serializer = JsonSerializer.Create(Configuration.Formatters.JsonFormatter.SerializerSettings); 

这应该给你相同的序列化的Web API使用。

+0

谢谢,实际上我正在使用这个轻微的变化。但是这仍然调用JsonSerializer.Create(),它创建了一个新的串行器实例。我在想如果我可以参考已经由web api本身实例化的序列化程序。 – Amila 2013-03-14 07:13:28

+0

Web API为每个请求创建一个新的序列化器。所以这并不意味着什么。 Json串行器是非常轻量级的对象。 – 2013-03-31 00:37:14

+1

我不得不使用'GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings'。 – Dejan 2015-11-07 13:05:47