首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果名称大写,则忽略JsonProperty

如果名称大写,则忽略JsonProperty
EN

Stack Overflow用户
提问于 2018-02-06 16:30:31
回答 2查看 8.8K关注 0票数 4

我希望能够使用CamelCasePropertyNameContractResolver,但对特定的属性名称重写它。为此,我使用JsonProperty属性。这很好,除非我选择的名字完全大写。有什么不对的地方吗?怎样才能避开它?

在下面的示例中,Bar在不使用CamelCasePropertyNameContractResolver时被序列化为"BAR",但在使用解析器时被序列化为"bar"。在这两种情况下,FooCamelCaseProperty都是正确序列化的。

代码语言:javascript
复制
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; }
    }
}
EN

Stack Overflow用户

发布于 2018-02-06 17:47:58

JsonProperty属性在使用ContractResolver时不被接受。

要解决这个问题,您可以做的是覆盖ContractResolver:

代码语言:javascript
复制
public class MyResolver : CamelCasePropertyNamesContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);
        if(member.GetCustomAttribute<JsonPropertyAttribute>() is JsonPropertyAttribute jsonProperty)
        {
            property.PropertyName = jsonProperty.PropertyName;
        }

        return property;
    }
}

用你的救世主:

代码语言:javascript
复制
var output2 = JsonConvert.SerializeObject(foo, new JsonSerializerSettings { ContractResolver = new MyResolver() });
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48647650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档