【问题标题】:How do I keep nested JSON as a string [duplicate]如何将嵌套的 JSON 保留为字符串 [重复]
【发布时间】:2017-09-08 07:33:44
【问题描述】:

我正在使用 Refit 调用 REST 服务,它正在反序列化使用我提供的类定义返回的 JSON。返回的对象的一个​​属性是 JSON,因此我有效地嵌套了 JSON。

我想将嵌套属性反序列化为字符串,因为我事先不知道它是什么类型。

这是 JSON

{
    "Id": "f90b443d-300c-4e6d-a488-eb4bbf62889e",
    "Type": "e9ccd222-c252-4846-bf16-5936820a3177",
    "SharedName": null,
    "Cache": 1,
    "Data": {
        "Description": "Central Coast"
    }
},
{
    "Id": "f863581b-67e2-49e0-83c9-ab5820715f4f",
    "Type": "7d1c81bd-0b94-4b88-998b-14a8fb9dbbfd",
    "SharedName": null,
    "Cache": 1,
    "Data": {
        "Name": "Emergency Department (ED) Report"
    }
}

这是我的类定义

public class EntityDetails
{
    public string Id { get; set; }
    public string Type { get; set; }
    public string SharedName { get; set; }
    public int Cache { get; set; }
    public string Data { get; set; }
}

但我收到此错误:

"读取字符串时出错。意外的标记:StartObject.Path '[0].Data', 第 7 行,第 14 位。”

是否有一个 JSON 属性可以告诉反序列化器做什么?

【问题讨论】:

  • 我想将嵌套属性反序列化为字符串 -- 究竟如何你想反序列化它?它总是一个具有单个 "Name" 属性的对象,还是可以是任何东西?
  • 它可以是任何东西,也可以为空。您可以在上面看到第一项具有 Description 属性,第二项具有 Name 属性。
  • 好的,那么你想要的字符串是什么?原始 JSON?在这种情况下,您可以考虑使用来自How can I serialize and deserialize a type with a string member that contains “raw” JSON, without escaping the JSON in the processRawConverter。 (从错误消息来看,您似乎正在使用 Json.NET 反序列化您的 JSON,这就是我链接到该答案的原因。)
  • 我正在使用 Newtonsoft.Json 但原始转换器可以正常工作,谢谢。请把它写成答案,我会标记为正确的,
  • 酷就行。感谢您的及时帮助。

标签: c# json


【解决方案1】:

您可以将Data 更改为objectNewtonsoft.Json.Linq.JObject。 然后ToString它。

public class EntityDetails
{
    (...)
    public Newtonsoft.Json.Linq.JObject Data { get; set; }
}

(...)
var x = JsonConvert.DeserializeObject<EntityDetails>(jsonString);
var dataAsString = x?.Data?.ToString();

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2017-10-25
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多