我希望每個沒有指定JsonPropertyAttribute
的屬性遵循自定義合同。但是,如果它被指定,那就是它應該是。ContractResolver可以更改映射的屬性
但是,如果我有一個映射屬性並使用自定義合約解析器,那麼合約解析器可以更改映射屬性。
例如,當指定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
更改屬性。