C# 动态类型 Object 属性 First 始终为 null
Posted
技术标签:
【中文标题】C# 动态类型 Object 属性 First 始终为 null【英文标题】:C# dynamic type Object property First is always null 【发布时间】:2019-11-27 06:33:07 【问题描述】:我正在使用 Newtonsoft.Json 在 C# 中创建一个动态对象并尝试迭代其成员。
Json 布局等于:
["id": "Name", "spec": More Data, "id": "Name", "spec": More Data, ...]
当我尝试以下操作时:
dynamic jsonObj = JsonConvert.DeserializeObject(jsonString);
foreach (dynamic entry in jsonObj)
dynamic first = entry.First;
我首先收到一个包含 null
的对象,即使条目具有运行时生成的成员 First 和 Last,它们不是 null
(当我在 Visual Studio 中以调试模式查看它们时)。
我可以访问成员。使用时:
dynamic first = entry["id"];
我收到了正确的值,而不是 null
。所以里面一定有数据。
是否无法循环访问运行时生成的成员,还是有其他错误?
PS:我知道,我必须调用entry.First.First
才能访问"id"
的值。但这也只返回null
。
我的动态对象的内容截图:
【问题讨论】:
Json 中没有可以映射到First
属性的内容。如果您希望动态对象是一个集合,那么 json 需要采用集合格式,并且 json 中的集合格式以 [
开头并以 ]
结尾
@ChetanRanpariya 谢谢,我纠正了这个错误。我也检查了代码中的对象。它被写成Collection。我还添加了动态对象内容的图像。
【参考方案1】:
using Newtonsoft.Json;
using System;
namespace ConsoleApp2
class Program
static void Main(string[] args)
string jsonString = @"
[
[ item1: 'id': 'Name' ,
item2: 'spec': 'More Data'
,
item1: 'id': 'Name' ,
item2: 'spec': 'More Data'
]
]";
dynamic jsonObj = JsonConvert.DeserializeObject(jsonString);
foreach (dynamic row in jsonObj)
Console.WriteLine($"Row\nrow\n--------------------");
foreach (var column in row)
Console.WriteLine($"Column\ncolumn\n--------------------");
foreach (var item in column)
Console.WriteLine($"item\nitem\n--------------------");
foreach (var part in item)
Console.WriteLine($"part\npart\n--------------------");
foreach (var subpart in part)
Console.WriteLine($"subpart\nsubpart\n--------------------");
foreach (var subsubpart in subpart)
Console.WriteLine($"subsubpart\nsubsubpart\n--------------------");
Console.ReadKey();
给予:
Row
[
"item1":
"id": "Name"
,
"item2":
"spec": "More Data"
,
"item1":
"id": "Name"
,
"item2":
"spec": "More Data"
]
--------------------
Column
"item1":
"id": "Name"
,
"item2":
"spec": "More Data"
--------------------
item
"item1":
"id": "Name"
--------------------
part
"id": "Name"
--------------------
subpart
"id": "Name"
--------------------
subsubpart
Name
--------------------
item
"item2":
"spec": "More Data"
--------------------
part
"spec": "More Data"
--------------------
subpart
"spec": "More Data"
--------------------
subsubpart
More Data
--------------------
Column
"item1":
"id": "Name"
,
"item2":
"spec": "More Data"
--------------------
item
"item1":
"id": "Name"
--------------------
part
"id": "Name"
--------------------
subpart
"id": "Name"
--------------------
subsubpart
Name
--------------------
item
"item2":
"spec": "More Data"
--------------------
part
"spec": "More Data"
--------------------
subpart
"spec": "More Data"
--------------------
subsubpart
More Data
--------------------
【讨论】:
以上是关于C# 动态类型 Object 属性 First 始终为 null的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?