使用 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 操作。
我需要使用 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 操作。