【发布时间】:2016-10-25 15:49:49
【问题描述】:
如何控制 JObject 到字符串的序列化?
我有一些返回 JObject 的 API,我通常会应用一些更改并保留或返回它们。我想避免保留空属性并应用一些额外的格式,但 JsonConvert 似乎完全忽略了我的设置。
这是问题的示例:
// startup.cs has the following
services.AddMvc().AddJsonOptions(o =>
{
o.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
public class SampleController : Controller
{
JsonSerializerSettings _settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
[HttpPost]
[Route("object")]
public object PostObject([FromBody] SomeObject data)
{
return JsonConvert.SerializeObject(data, _settings);
}
[HttpPost]
[Route("jobject")]
public object PostJObject([FromBody] JObject data)
{
return JsonConvert.SerializeObject(data, _settings);
}
public class SomeObject
{
public string Foo { get; set; }
public string Bar { get; set; }
}
}
发帖{ "Foo": "Foo", "Bar": null }:
-
/object返回{"Foo":"Foo"} -
/jobject返回{"Foo":"Foo","Bar":null}
我希望 JObject 方法返回与使用对象相同的输出 json。我如何在不创建助手的情况下实现这一目标?有没有办法使用相同的设置序列化 JObject?
【问题讨论】:
-
JObject没有返回 JSON 的ToString方法吗? -
我认为您不能在使用
JsonConvert.SerializObject()进行序列化期间“编辑”JObject。JObject已经被序列化,所以JsonConvert所做的只是或多或少地逐字发出。见Newtonsoft Json.Net serialize JObject doesn't ignore nulls, even with the right settings。有关解决方法,请参阅JSON.NET serialize JObject while ignoring null properties, -
@MikeMcCaughan JObject.ToString 将对象转换为 json,但没有任何重载来接受设置对象。