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;
}
}
}
正如你所看到的,我的杜伯字段设置为null,但结果是以下
{ "Id":1, "FirstName":"Adrian", "LastName":"Bobby" }
和Dob
不是序列为空,我需要它!
(我已经测试了JsonProperty
被设置其他属性,如姓名,并将其完美地改变了JSON输出。我只是不能为null的属性被序列化。而且,我已经测试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; }
}
}
而输出是:
{"Id":1,"FirstName":"Adrian","LastName":"Bobby","Dob":null}
正如预期的那样。
这似乎是问题的关键在于你是如何实际调用JsonSerializer
序列化Person
的实例。
我从微软web.api民间的成员接受这个答复。
“你会很高兴知道,因为RC这已得到修复:
http://aspnetwebstack.codeplex.com/workitem/243
您可以升级到更新包,或者您也可以覆盖我们这样设置:
JsonFormatter.SerializerSettings =新JsonSerializerSettings(){NullValueHandling = NullValueHandling.Include};
希望帮助
因此,所有的作品与更新。
文章来源: Serializing to JSON, Nullable Date gets omitted using Json.NET and Web API despite specifying NullValueHandling