繁体   English   中英

如何在 MVC 中设置不同的序列化名称和反序列化名称?

[英]How can I set a different serialized name and deserialized name in MVC?

我有一个带有[DataContract][DataMember]属性的类。 我将Origin属性上的 Name 设置为custom variables因为这是我调用的 api 提供的。 问题是,这只解决了对象的反序列化。 当需要序列化对象时,我想将Origin属性序列化为origin

[DataContract]
public class Request
{
    ...

    [DataMember(Name = "custom variables")]
    public Origin Origin { get; set; }
}

例如,我想反序列化这个:

{
    ...

    "custom variables": {
        "url": "URL_HERE",
        "origin": "ORIGIN_HERE"
    }
}

并在序列化时将其转换为:

{
    ...

    "origin": {
        "url": "URL_HERE",
        "origin": "ORIGIN_HERE"
    }
}

我怎样才能做到这一点? 有没有办法在不为对象上的所有属性编写自定义序列化程序的情况下做到这一点?

正如官方文档中所解释的:

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to#customize-individual-property-names

您必须使用 JsonPropertyName 装饰器(来自 System.Text.Json.Serialization 命名空间)装饰该属性。

例如:

public class WeatherForecastWithPropertyNameAttribute {
    public DateTimeOffset Date { get; set; }
    public int TemperatureCelsius { get; set; }
    public string Summary { get; set; }
    [JsonPropertyName("Wind")]
    public int WindSpeed { get; set; }
}

序列化/反序列化 json:

{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot",
  "Wind": 35
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM