【问题标题】:Can I map a JSON element "@somename"? [duplicate]我可以映射一个 JSON 元素“@somename”吗? [复制]
【发布时间】:2019-07-19 16:25:46
【问题描述】:

我的目标是带有 winforms 应用程序的 .net framework 4.7。 我开始关注这篇文章https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/console-webapiclient,所以我正在使用 DataContractJsonSerializer。 我正在尝试了解返回 JSON 的 REST 接口 -

{"Resource":
    {"@attributes":
        {"name":"Asset",
        "resourceId":"Asset",
        "type":"Resource"
        }
    }
}

我使用 netwonsoft.json 12.0.2 将 JSON 粘贴为类。它忽略“@”字符并在“资源”类中创建一个“属性”类型的成员“属性”。
当 DataContractJsonSerializer 尝试反序列化 JSON 时,它会跳过 @attribute 元素,我推测是因为它与类名不匹配。

有没有办法将元素@attributes 映射到我的属性成员/类?

我尝试在 Resource 类的属性成员上添加 [DataMember(Name = "@attributes")] 并在 Attributes 类上添加 [DataContract(Name = "@attributes")] 但元素似乎仍然是已跳过(Resource 的属性成员为空)。

【问题讨论】:

  • 能否请edit 使用有效的 JSON 发布?此外,通常 Json.Net 是首选的反序列化器(并且副本涵盖了使用它重命名属性的各种方式),如果您必须使用 DataContractJsonSerializer 在帖子中澄清它 - 可能需要另一个副本。
  • 我不必使用DataContractJsonSerializer;我之所以使用它,是因为它在我遵循的创建 REST 客户端的文章中。 (见编辑后的帖子)

标签: c# json winforms datacontractjsonserializer


【解决方案1】:

是的,使用JsonProperty

public class MyClass
{
    [JsonProperty("@attributes")]
    public string attributes { get; set; }
}

【讨论】:

  • 我认为这个属性只适用于newtonsoft.json JsonConvert.DeserializeObject。
  • @AlecJames 抱歉,我一定误解了您问题中提到 Newtonsoft 的部分。
  • 这是我的错误 - 我认为 newtonsoft 组件添加并将粘贴作为 json 类提供给粘贴特殊菜单,因为我认为它是在我安装后出现的。但是内置的粘贴为类取决于它是否可以粘贴为类。
猜你喜欢
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2011-04-25
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多