Json .Net将扁平对象序列化为复杂对象(在序列化/反序列化时更改对象结构)

时间:2016-04-24 11:24:52

标签: c# json serialization json.net

我有像这样的平面DTO

public class User
{
    [JsonProperty("email")]
    public string Email { get; set; }

    [JsonProperty("fname")]
    public string FirstName { get; set; }

    [JsonProperty("lname")]
    public string LastName { get; set; }

    [JsonProperty("phone")]
    public string Phone { get; set; }

    [JsonProperty("city")]
    public string City { get; set; }

    [JsonProperty("country")]
    public string CountryCode { get; set; }

    [JsonProperty("state")]
    public string State { get; set; }

    [JsonProperty("zip")]
    public string Zip { get; set; }

    [JsonProperty("address1")]
    public string Address1 { get; set; }

    [JsonProperty("address2")]
    public string Address2 { get; set; }
}

默认情况下,将其序列化为' flat' JSON:

{
     'email':'john@doe.net',
     'fname':'John',
     'phone':'123456789',
     'city':'New York',
     'zip':'1111',
     'lname':'Joe',
     'state':'NY',
     'address1' : 'address1'
}

我想将它序列化为更结构化的JSON对象:

{
     'email':'john@doe.net',
     'fname':'John',
     'phone':'123456789',
     'lname':'Joe',
     'address' : {
         'city':'New York',
         'zip':'1111',         
         'state':'NY',
         'address1' : 'address1'
      }         
}

有没有办法在不创建自定义JsonConverter的情况下执行此操作?

1 个答案:

答案 0 :(得分:3)

不,如果没有自定义的JsonConverter,或者没有通过引入正确的Address类来简化 flat 模型的结构,就无法做到这一点。