atr*_*eon 5 .net c# serialization json.net asp.net-web-api
using Newtonsoft.Json;
namespace FAL.WebAPI2012.Controllers
{
public class Person
{
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include,
NullValueHandling = NullValueHandling.Include)]
public DateTime? Dob { get; set; }
}
public class TestNullsController : ApiController
{
// GET api/<controller>
public Person Get()
{
Person myPerson = new Person() {
Dob = null, FirstName = "Adrian", Id=1, LastName="Bobby"
};
return myPerson;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我的 Dob 字段设置为 null 但结果如下
{ "Id":1, "FirstName":"Adrian", "LastName":"Bobby" }
Run Code Online (Sandbox Code Playgroud)
并且Dob没有序列化为我需要的 null !
(我已经测试过JsonProperty设置其他属性,如 name 并且它完美地改变了 JSON 输出。我只是无法将可空属性序列化。另外,我已经测试了 Json.Net(见下面的答案),所以我的想法是该 web api 设置在某处覆盖了某些东西,很高兴知道在哪里)。
问题似乎出在其他地方。我在控制台应用程序中完成了以下操作:
using System;
using System.IO;
using Newtonsoft.Json;
namespace JsonNetNullablePropertyTest
{
class Program
{
static void Main()
{
var myPerson = new Person {
Dob = null,
FirstName = "Adrian",
Id = 1,
LastName = "Bobby"
};
using (var textWriter = new StringWriter())
using (var writer = new JsonTextWriter(textWriter))
{
// Create the serializer.
var serializer = new JsonSerializer();
// Serialize.
serializer.Serialize(writer, myPerson);
// Write the output.
Console.WriteLine(textWriter);
}
}
}
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include,
NullValueHandling = NullValueHandling.Include)]
public DateTime? Dob { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
{"Id":1,"FirstName":"Adrian","LastName":"Bobby","Dob":null}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。
问题似乎在于您如何实际调用JsonSerializer来序列化Person实例。
我收到了来自 Microsoft web.api 人员的回复。
“您会很高兴知道自 RC 以来这个问题已得到解决:
http://aspnetwebstack.codeplex.com/workitem/243
您可以升级到更新的软件包,也可以覆盖我们的设置,如下所示:
JsonFormatter.SerializerSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Include };
希望有帮助'
所以,一切都适用于该更新。
| 归档时间: |
|
| 查看次数: |
10532 次 |
| 最近记录: |