我正在ASP.NET webapi代码库中工作,我们在很大程度上依赖于通过JSON.NET自动支持将消息体的JSON反序列化为.NET对象.
作为构建我们的一个资源的补丁支持的一部分,我非常希望区分JSON对象中不存在的可选属性与明确为null的相同属性.我的意图是使用第一个"不要改变那里有什么"与"删除这个东西".
有没有人知道是否有可能标记我的C#DTO,以便在反序列化时,JSON.NET可以告诉我它是哪种情况?现在他们只是空出来,我不知道为什么.
相反,如果有人能够提出一个更好的设计,不需要我这样做,同时仍然支持补丁动词,我很想听听你的建议.
作为一个具体的例子,考虑将传递给put的这个有效负载:
{
"field1": "my field 1",
"nested": {
"nested1": "something",
"nested2": "else"
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我只想更新field1,我应该能够将其作为HTTP补丁发送:
{
"field1": "new field1 value"
}
Run Code Online (Sandbox Code Playgroud)
并且嵌套值将保持不变.但是,如果我发送了这个:
{
"nested": null
}
Run Code Online (Sandbox Code Playgroud)
我想知道这意味着我应该明确删除嵌套数据.
使用Json.NET时,我试图使用"JSON to LINQ"支持动态创建JSON结构.
在下面,jObject是一个JObject和JObject.Add采用(字符串,JToken).但是,我无法找到如何添加Undefined或Null标记 - 我也无法找到如何使用适当的Null/Undefined类型创建JValues.
string value = GetValue();
if (value == "undefined") {
jObject.Add(key, /* how to add "Undefined" token? */);
} else if (value == "null") {
jObject.Add(key, /* how to add "Null" token? */);
} else {
jObject.Add(key, new JToken(value)); /* String value/token */
}
Run Code Online (Sandbox Code Playgroud)
如何为未定义的JSON显式添加JToken/JValue?JSON Null怎么样?