gpt4 book ai didi

c# - 尽管指定了 NullValueHandling,但使用 Json.NET 和 Web API 序列化为 JSON,可空日期被省略

转载 作者:太空狗 更新时间:2023-10-30 00:54:49 25 4
gpt4 key购买 nike

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;
}
}
}

如您所见,我的 Dob 字段设置为 null 但结果如下

{ "Id":1, "FirstName":"Adrian", "LastName":"Bobby" }

并且 Dob 没有序列化为 null,这是我需要的!

(我已经测试过 JsonProperty 正在设置名称等其他属性,它完美地更改了 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; }
}
}

输出是:

{"Id":1,"FirstName":"Adrian","LastName":"Bobby","Dob":null}

正如预期的那样。

问题似乎在于您实际上是如何调用 JsonSerializer 来序列化 Person 实例的。

关于c# - 尽管指定了 NullValueHandling,但使用 Json.NET 和 Web API 序列化为 JSON,可空日期被省略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com