对象序列化的自定义属性名称

时间:2021-06-04 18:28:18

标签: c# json .net serialization

我将数据绑定到一个对象。现在我想用自定义属性名称序列化它。

        [JsonProperty(PropertyName = "KLM")]
        public string ABC { get; set; } = "Test1";

        [JsonProperty(PropertyName = "NOP")]
        public string DEF { get; set; } = "Test2";

        [JsonProperty(PropertyName = "QRS")]
        public string GHI { get; set; } = "Test3";

当我序列化这个对象时,我想要下面的序列化

{ "KLM" : "Test1", "NOP" : "Test2", "QRS" : "Test3" }

代替

{ "ABC" : "Test1", "DEF" : "Test2", "GHI" : "Test3" }

当使用下面的 JSON 反序列化它时,它应该可以正常工作

{ "ABC" : "1Test", "DEF" : "2Test", "GHI" : "3Test" }

这个问题可能被问过很多次,但我找不到合适的答案。

1 个答案:

答案 0 :(得分:0)

请尝试:

using Newtonsoft.Json;

namespace Application.ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var j = "{ \"KLM\" : \"Test1\", \"NOP\" : \"Test2\", \"QRS\" : \"Test3\" }";

            var o = JsonConvert.DeserializeObject<MyJsonObject>(j);

            var s  = JsonConvert.SerializeObject(o);
        }
    }

    public class MyJsonObject
    {
        [JsonProperty(PropertyName = "KLM")]
        public string ABC { get; set; } = "Test1";

        [JsonProperty(PropertyName = "NOP")]
        public string DEF { get; set; } = "Test2";

        [JsonProperty(PropertyName = "QRS")]
        public string GHI { get; set; } = "Test3";
    }
}

您可能正在使用不同的工具进行属性和序列化/反序列化。在我的示例中,您可以看到我使用的是 Newtonsoft 库。我正在从这个库中获取属性和方法。例如,如果您使用来自 Newtonsoft 的属性和来自 System.Text.Json 的方法,它将无法按您想要的方式工作。

更新:

enter image description here

这不是你想要的吗?

图片显示这是双向的。如果 json 匹配属性,则通过属性对其进行反序列化。如果 json 与类的属性名称匹配,则 json 将通过属性名称反序列化。这个对象总是被属性反序列化。

如果我仍然误解你,对不起!