【问题标题】:Access the default JSON.NET serializer in ASP.NET Web API访问 ASP.NET Web API 中的默认 JSON.NET 序列化程序
【发布时间】:2013-03-13 14:43:23
【问题描述】:

我有一个 ASP.NET Web API 项目,因为它不支持有 2 个主体参数,所以我使用一个 JObject 参数,然后从中提取实际参数。像这样。

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 的遗留应用程序。谢谢。

【问题讨论】:

    标签: asp.net-web-api json.net


    【解决方案1】:

    试试这个:

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

    这应该为您提供与 Web API 使用相同的序列化程序。

    【讨论】:

    • 谢谢,实际上我使用的是这个的轻微变化。但这仍然调用 JsonSerializer.Create() 创建序列化程序的新实例。我正在考虑是否可以引用已经由 web api 本身实例化的序列化程序。
    • Web API 为每个请求创建一个新的序列化程序。所以这并不意味着什么。 Json 序列化器是非常轻量级的对象。
    • 我不得不使用GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
    • 谢谢德扬。或者这里是整个辣酱玉米饼馅。 System.Web.Http.GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
    • 这避免了 [DataContract] 和 [DataMember] 属性的许多项目。而不是使用“Newtonsoft.Json.JsonConvert.SerializeObject”,使用它保留了“支持字段”样式。我在下一条评论中的代码:
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2015-02-07
    • 2016-12-11
    相关资源
    最近更新 更多