使用 C# 访问 JSON Body

Accessing JSON Body with C#

我需要使用 C# 访问 JSON 代码的 body。访问 header 有效,但它不适用于 body,而且我在网上找不到任何内容。 我有这个JSON代码

    `{
        "Example": {
            "Header": [
                [
                    "Header1",
                    "Header2",
                    "Header3",
                    "Header4"
                ]
            ],
            "Body": [
                {
                    "Header1": "BlaBla",
                    "Header2": 0,
                    "Header3": 20,
                    "Header4": 32
                },
{
                    "Header1": "BlaBlaBla",
                    "Header2": 22,
                    "Header3": 35,
                    "Header4": 25
                },
    ......`

但是我可以使用以下代码访问 headers:

JArray headers = locationsObject["Header"] as JArray; 
JArray header = headers.Last as JArray; //Last Header

如果我对 body 做同样的事情,它就是空的:

JArray bodys = locationsObject["Body"] as JArray; //all bodys -> it works here
JArray body = bodys.First as JArray; //First body -> this one is null!!!

我需要 body 中的整数。为此,我正在使用 Newtonsoft。有谁可以帮助我吗?非常感谢!

我建议你看看 serializing/deserializing json in c#。
How to serialize and deserialize (marshal and unmarshal) JSON in .NET

如果您没有 json json to c#

的 class 表示

你的主要代码行是这样的:

exObj = JsonSerializer.Deserialize<ExampleObject>(jsonString); 

它将是:
字符串 header1 = exObj.Body.Header1;

一种方法是使用 C# 的 'dynamic' 变量类型,它是专门为函数式编程语言设计的。它不是类型安全的,也不是强类型的,但您可以访问结果中的所有值。

不过,我强烈建议您创建 类 来模仿您尝试反序列化的 json,因为它会给您强大的输入和智能感知。

这是一个如何使用动态的示例。您需要安装 NewtonSoft.Json Nuget 包才能正常运行。

using Newtonsoft.Json;
using System;

namespace JsonDeserialized
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
        'Example':
            {   'Header':
                [
                    [
                        'Header1',
                        'Header2',
                        'Header3',
                        'Header4'
                    ]
                ],
                'Body':
                [
                    {
                        'Header1': 'BlaBla',
                        'Header2': 0,
                        'Header3': 20,
                        'Header4': 32
                    },
                    {
                        'Header1': 'BlaBlaBla',
                        'Header2': 22,
                        'Header3': 35,
                        'Header4': 25
                    }
                ]
            }
        }";

            var result = JsonConvert.DeserializeObject<dynamic>(json);

            Console.WriteLine(result.Example);

            foreach (var header in result.Example.Header[0])
            {
                Console.WriteLine(header);
            }

            Console.WriteLine(result.Example.Header[0][0]);
        }
    }
}

此程序将打印以下结果。


{
  "Header": [
    [
      "Header1",
      "Header2",
      "Header3",
      "Header4"
    ]
  ],
  "Body": [
    {
      "Header1": "BlaBla",
      "Header2": 0,
      "Header3": 20,
      "Header4": 32
    },
    {
      "Header1": "BlaBlaBla",
      "Header2": 22,
      "Header3": 35,
      "Header4": 25
    }
  ]
}
Header1
Header2
Header3
Header4
Header1

您的第一个主体不是 JArray 可能是问题的根源,而是 JObject,您可以尝试下面的代码,它应该可以正常工作

var bodys = locationsObject["Body"] as JArray;
var body = bodys[0];

您还可以使用 linq-to-json 进行更多 fine-tuned 操作。