18

如果我有一个为属性指定默认值的 JSON 模式,例如

{
    "type" : "object",
    "properties" : {
        "foo" : { "type" : "string" },
        "bar" : { "type" : "string", "default" : "some text" }
    }
}

...和一个 JSON 字符串,如

{
    "foo" : "lorem ipsum"
}

...我如何反序列化该 JSON 字符串,以便将bar其设置为“某些文本”(默认值)而不是 null?

4

3 回答 3

16

在 json 模式中,“默认”属性只是一个元数据(如“标题”和“描述”),因此如果没有提供,则不应将其用作值回退(假设您使用模式反序列化对象) . 这就是说,如果我们想从模式创建文档实例,我个人使用此默认值作为后备创建了一个反序列化器。然而,这不是一般情况。

于 2012-07-20T17:37:17.137 回答
8

我跟踪了 Json.NET 源代码中的引用,默认属性显然被解析了,但没有用于任何事情。所以,我自己的问题的答案是:你不能在当前的 Json.NET 版本中使用它。

于 2011-08-22T20:29:31.673 回答
0

当为多种用途、验证、表单呈现、文档和测试移植对象时,架构师决定何时以及如何使用默认值,您很可能会使用默认值。如果您正在寻找一种预先打包的、万能的解决方案,它可以处理重复默认值的额外数据存储和传输成本,那么其他模式方法可能具有更好的 .NET 支持 (xml)。

于 2014-04-01T01:53:32.743 回答