如何将 json 响应映射到具有不同字段名称的模型
How to map json response to the model with different field names
我正在使用 ASP.NET Core 6 和 System.Text.Json 库。
例如,我收到一些 API 的回复,结构如下
{
"items":
[
{
"A": 1,
"User":
{
"Name": "John",
"Age": 21,
"Adress": "some str"
},
},
{
"A": 2,
"User":
{
"Name": "Alex",
"Age": 22,
"Adress": "some str2"
},
}
]
}
而且我想将此响应写到 List<SomeEntity>
之类的模型,其中 SomeEntity
是
public class SomeEntity
{
public int MyA { get; set; } // map to A
public User MyUser { get; set; } // map to User
}
public class User
{
public string Name { get; set; }
public string MyAge { get; set; } // map to Age
}
我该怎么做?
更新:
是否可以映射嵌套属性?
public class SomeEntity
{
// should I add an attribute [JsonPropertyName("User:Name")] ?
public string UserName{ get; set; } // map to User.Name
}
使用 JsonPropertyName 属性
public class Model
{
[JsonPropertyName("items")]
public SomeEntity[] Items { get; set; }
}
public class SomeEntity
{
[JsonPropertyName("A")]
public int MyA { get; set; } // map to A
[JsonPropertyName("User")]
public User MyUser { get; set; } // map to User
}
public class User
{
public string Name { get; set; }
[JsonPropertyName("Age")]
public string MyAge { get; set; } // map to Age
}
然后你可以用
之类的东西反序列化它
JsonSerializer.Deserialize<Model>(response);
请试试这个
[JsonConverter(typeof(JsonPathConverter))]
public class SomeEntity
{
[JsonProperty("items.User.Name")]
public string UserName{ get; set; } // map to User.Name
}
反序列化使用:
JsonSerializer.Deserialize<SomeEntity>(response);
我正在使用 ASP.NET Core 6 和 System.Text.Json 库。
例如,我收到一些 API 的回复,结构如下
{
"items":
[
{
"A": 1,
"User":
{
"Name": "John",
"Age": 21,
"Adress": "some str"
},
},
{
"A": 2,
"User":
{
"Name": "Alex",
"Age": 22,
"Adress": "some str2"
},
}
]
}
而且我想将此响应写到 List<SomeEntity>
之类的模型,其中 SomeEntity
是
public class SomeEntity
{
public int MyA { get; set; } // map to A
public User MyUser { get; set; } // map to User
}
public class User
{
public string Name { get; set; }
public string MyAge { get; set; } // map to Age
}
我该怎么做?
更新:
是否可以映射嵌套属性?
public class SomeEntity
{
// should I add an attribute [JsonPropertyName("User:Name")] ?
public string UserName{ get; set; } // map to User.Name
}
使用 JsonPropertyName 属性
public class Model
{
[JsonPropertyName("items")]
public SomeEntity[] Items { get; set; }
}
public class SomeEntity
{
[JsonPropertyName("A")]
public int MyA { get; set; } // map to A
[JsonPropertyName("User")]
public User MyUser { get; set; } // map to User
}
public class User
{
public string Name { get; set; }
[JsonPropertyName("Age")]
public string MyAge { get; set; } // map to Age
}
然后你可以用
之类的东西反序列化它JsonSerializer.Deserialize<Model>(response);
请试试这个
[JsonConverter(typeof(JsonPathConverter))]
public class SomeEntity
{
[JsonProperty("items.User.Name")]
public string UserName{ get; set; } // map to User.Name
}
反序列化使用:
JsonSerializer.Deserialize<SomeEntity>(response);