启用/禁用指定[JsonProperty]名称的使用

Voj*_*h B 5 c# json.net

有没有办法如何以编程方式启用/禁用指定的属性名称的使用[JsonProperty]

当我序列化时:

public class Dto
{
    [JsonProperty("l")]
    public string LooooooooooooongName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在"调试"中看到输出:

{
    "LooooooooooooongName":"Data"
}
Run Code Online (Sandbox Code Playgroud)

并且"在发布中":

{
    "l":"Data"
}
Run Code Online (Sandbox Code Playgroud)

tia*_*tia 4

只需创建一个解析器来处理这项工作。

public class NoJsonPropertyNameContractResolver : DefaultContractResolver
{

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {

        JsonProperty property = base.CreateProperty(member, memberSerialization);
        property.PropertyName = property.UnderlyingName;
        return property;
    }
}
Run Code Online (Sandbox Code Playgroud)

以及启动代码中的某处

#if DEBUG
JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
        {
                ContractResolver = new NoJsonPropertyNameContractResolver()
        };
#endif
Run Code Online (Sandbox Code Playgroud)

现在,您的调试和发布版本之间的行为不一致(但为什么?)。