【问题标题】:Parsing JSON properties with spaces into objects将带有空格的 JSON 属性解析为对象
【发布时间】:2015-07-22 15:24:50
【问题描述】:

我正在使用返回 JSON 的第三方系统。

我正在研究如何反序列化以下 json;

{"getResponse": {
    "Results": {
        "Result 1": {"Row": [{Name:Somename}]
     }
}

我正在使用 Newtonsoft JSON 库。任何人都知道我如何将其解析为 .Net 对象?

【问题讨论】:

  • 通常您会使用obj['Result 1'] 而不是obj->Result 1,无论您选择的.net 语言中的等价物是什么。
  • 这是无效的 JSON(可能只是问题中的“错字”?)
  • 不,这不是错字。字段名称用引号括起来并且有效。见stackoverflow.com/questions/5716792/json-fieldnames-spaces
  • 是否有一些固定的结果集,或者可能有任意数量的结果?
  • 这里是分析json的有用网站。 jsoneditoronline.org你可以看到它不喜欢你的sn-p。你是生成这个 json 还是从外部源提供的?

标签: json json.net


【解决方案1】:

要使用JsonConvert.DeserializeObject<T> 将您的 JSON 解析为对象,您可以使您的类结构如下:

public class RootObject
{
    public GetResponse getResponse { get; set; }
}

public class GetResponse
{
    public Results Results { get; set; }
}

public class Results
{
    [JsonProperty("Result 1")]
    public Result1 Result1 { get; set; }
}

public class Result1
{
    [JsonProperty("Row")]
    public List<Row> Rows { get; set; }
}

public class Row
{
    public string Name { get; set; }
}

然后像这样反序列化:

string json = @"
{
    ""getResponse"": {
        ""Results"": {
            ""Result 1"": {
                ""Row"": [
                    {
                        ""Name"": ""Somename""
                    }
                ]
            }
        }
    }
}";

RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
foreach (Row row in root.getResponse.Results.Result1.Rows)
{
    Console.WriteLine(row.Name);
}

【讨论】:

    【解决方案2】:

    我希望有更好的方法来做到这一点,所以我发布这个是希望有人能提供更好的答案。

    鉴于以下(更正)JSON;

    {"getResponse": {
        "Results": {
            "Result 1": {"Row": [{"Name":"Somename"}]
         }
      }
    }
    

    我想反序列化 Row 数组中的元素,但不确定如何使用自定义转换器执行此操作。

    所以在我有时间找到更好的方法之前,我的解决方案是这样的;

    JObject result = JObject.Parse(response);
    var t = result["getResponse"]["Results"]["Result 1"]["Row"];
    var els =                 
            JsonConvert.DeserializeObject<List<MyResponse>>(t.ToString());
    

    【讨论】:

    • 但是,我想做的是使用 JsonConvert.DeserializeObject 方法。但是,我不确定给定 JSON 需要什么类结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多