【发布时间】:2014-09-04 16:47:39
【问题描述】:
我希望每个未指定 JsonPropertyAttribute 的属性都遵循自定义合同。但是,如果指定了,那就应该是这样。
但如果我有一个映射属性并且正在使用自定义合同解析器,那么合同解析器可以更改映射属性。
例如,当指定 JsonProperty("hello") 时,我应该在 JSON 输出中看到 hello。相反,我看到了hello_。我提交了issue,但被告知要覆盖更高的方法,但不是哪个。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace DeserializeTest
{
class Program
{
static void Main()
{
var json = new JObject(new JProperty("hello", "world"));
var settings = new JsonSerializerSettings { ContractResolver = new CustomContractResolver() };
var a = JsonConvert.DeserializeObject<Test>(json.ToString(), settings);
}
}
public class Test
{
[JsonProperty("hello")]
public string FooBar { get; set; }
}
public class CustomContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName + "_";
}
}
}
那么我如何让 Json.NET 在指定时始终使用(而不是更改)JsonProperty?
现实世界的例子:我正在使用SnakeCamelCaseContractResolver。它在文本和数字之间添加下划线。这模仿了 Rails 的序列化方式。但是在不遵循规范的情况下,例如address1,我需要能够防止SnakeCamelCaseContractResolver 更改属性。
【问题讨论】: