【发布时间】:2018-02-06 16:30:31
【问题描述】:
我希望能够使用CamelCasePropertyNameContractResolver,但为特定的属性名称覆盖它。为此,我使用JsonProperty 属性。这很好用,除非我选择的名称完全大写。任何想法有什么问题或如何解决它?
在下面的示例中,Bar 在我不使用 CamelCasePropertyNameContractResolver 时被序列化为 "BAR",但在我使用解析器时被序列化为 "bar"。 Foo 和 CamelCaseProperty 在这两种情况下都正确序列化。
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace ConsoleTester
{
class Program
{
static void Main(string[] args)
{
var foo = new FooBar {CamelCaseProperty = "test", Foo = "test", Bar = "test" };
var output = JsonConvert.SerializeObject(foo);
// output "CamelCaseProperty", "fOO", "BAR"
var output2 = JsonConvert.SerializeObject(foo, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() });
// output "camelCaseProperty", "fOO", "bar"
}
}
public class FooBar
{
public string CamelCaseProperty { get; set; }
[JsonProperty("fOO")]
public string Foo { get; set; }
[JsonProperty("BAR")]
public string Bar { get; set; }
}
}
【问题讨论】:
-
而不是
new CamelCasePropertyNamesContractResolver()使用new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy() }。原因见here。
标签: c# .net serialization json.net