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

时间:2017-04-07 15:35:05

标签: c# json serialization asp.net-core asp.net-core-mvc

我的课程上有[DataContract][DataMember]属性。我将Origin属性上的名称设置为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"
    }
}
  

我该怎么做?有没有办法在不为对象的所有属性编写自定义序列化程序的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

如官方文档中所述:

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
}