使用嵌套对象中的属性反序列化 JSON [重复]
Posted
技术标签:
【中文标题】使用嵌套对象中的属性反序列化 JSON [重复]【英文标题】:Deserializing JSON with a property in a nested object [duplicate] 【发布时间】:2016-02-06 11:10:56 【问题描述】:如何轻松将此 JSON 反序列化为 OrderDto C# 类?有没有办法以某种方式使用属性来做到这一点?
JSON:
"ExternalId": "123",
"Customer":
"Name": "John Smith"
...
C#:
public class OrderDto
public string ExternalId get; set;
public string CustomerName get; set;
...
我尝试使用 JsonProperty 属性,但无法使其正常工作。我的想法是写一个注释,如:
[JsonProperty("Customer/Name")]
public string CustomerName get; set;
但它似乎不起作用。有任何想法吗?谢谢! :)
【问题讨论】:
【参考方案1】:你的类应该是这样的:
public class OrderDto
public string ExternalId get; set;
public Customer Customer get; set;
public class Customer
public string CustomerName get; set;
未来一个好主意是采用一些现有的 JSON 并使用 http://json2csharp.com/
【讨论】:
指向 json2csharp 的链接非常有用。谢谢!!! 不客气! 这没有回答问题。这个问题意味着在不创建新类的情况下反序列化嵌套对象。 非常有用的评论,谢谢。该问题已经有了答案,因此作为副本关闭。这个答案是为了提供另一种可能的解决方案。【参考方案2】:您可以创建另一个嵌套其余属性的类,如下所示:
public class OrderDto
public string ExternalId get; set;
public Customer Customer get; set;
public class Customer
public string Name get; set;
这是因为 Name 是 JSON 数据中 Customer 对象的嵌套属性。
[JsonProperty("")]
代码通常在 JSON 名称与您希望在代码中提供的名称不同时使用,即
[JsonProperty("randomJsonName")]
public string ThisIsntTheSameAsTheJson get; set;
【讨论】:
那么,除了引入新的类,没有别的办法了吗?我希望我不需要介绍新的...... @bojank 据我所知没有。 C# 端必须复制数据在 JSON 中的表示方式。可以将其转换为字符串的键值对或其他东西,但这可能不是首选。"Customer": "Name": "John Smith"
是另一个对象,除了为此创建一个新对象之外别无他法。以上是关于使用嵌套对象中的属性反序列化 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用嵌套映射的 JSON 对象反序列化,Java Spring
如何将具有嵌套属性的 JSON 对象反序列化为 Symfony 实体?
如何使用 Newtonsoft.Json 正确反序列化数组中的嵌套对象? [复制]