C# 用C访问JSON主体#

C# 用C访问JSON主体#,c#,json,json.net,marshalling,C#,Json,Json.net,Marshalling,我需要用C#访问JSON代码的主体。访问标题是可行的,但它与主体不起作用,我在网上找不到任何东西。 我有这个JSON代码 `{ "Example": { "Header": [ [ "Header1", "Header2",

我需要用C#访问JSON代码的主体。访问标题是可行的,但它与主体不起作用,我在网上找不到任何东西。 我有这个JSON代码

    `{
        "Example": {
            "Header": [
                [
                    "Header1",
                    "Header2",
                    "Header3",
                    "Header4"
                ]
            ],
            "Body": [
                {
                    "Header1": "BlaBla",
                    "Header2": 0,
                    "Header3": 20,
                    "Header4": 32
                },
{
                    "Header1": "BlaBlaBla",
                    "Header2": 22,
                    "Header3": 35,
                    "Header4": 25
                },
    ......`
但是,我可以使用以下代码访问标题:

JArray headers = locationsObject["Header"] as JArray; 
JArray header = headers.Last as JArray; //Last Header
如果我对主体执行相同操作,则为空:

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

我需要体内的整数。我用的是Newtonsoft。有人能帮我吗?多谢各位

我建议您看看在c#中序列化/反序列化json。

如果您没有json的类表示形式

您的主要代码行如下所示:

exObj = JsonSerializer.Deserialize<ExampleObject>(jsonString); 
exObj=JsonSerializer.Deserialize(jsonString);
它将是:

字符串头1=exObj.Body.header1

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

不过,我强烈建议您创建模仿您试图反序列化的json的类,因为它将为您提供强大的类型和智能感知

下面是一个如何使用dynamic的示例。您需要安装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]);
        }
    }
}


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

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

您还可以使用它进行更精细的操作。

这正是我要搜索的!非常感谢你!
var bodys = locationsObject["Body"] as JArray;
var body = bodys[0];