【发布时间】:2016-11-09 14:44:28
【问题描述】:
我正在尝试将一个非常复杂的 json 文件读入一个可以在 foreach 语句中动态访问的 JArray。但是,我收到一条错误消息,指出“当前 JsonReader 项目不是数组”如果我使用 JObject,我可以访问键和值,但这不是我需要能够浏览记录和按名称或 ID 等搜索。我对 newtwonsoft 和 JSON.net 有点陌生,因此我们将不胜感激!
JArray o1 = JArray.Parse(File.ReadAllText(@"myfilepath"));
dynamic records = o1;
foreach (dynamic record in records)
{
Console.WriteLine(record.Id + " (" + record.Name + ")");
}
我的 json 文件看起来像这样,有多个记录但是我已经缩短了它。我需要按 ID 或名称进行访问和搜索,但是我在访问时遇到问题。
String json = @"{
"RecordSetBundles" : [ {
"Records" : [ {
"attributes" : {
"type" : "nihrm__Location__c",
"url" : "/services/data/v38.0/sobjects/nihrm__Location__c/a0di0000001nI3oAAE"
},
"CurrencyIsoCode" : "USD",
"Id" : "a0di0000001nI3oAAE",
"Name" : "The City Hotel",
"nihrm__Abbreviation__c" : "TCH",
"nihrm__AddressLine1__c" : "1 Main Street",
"nihrm__AlternateNameES__c" : "El Ciudad Hotel",
"nihrm__AvailabilityScreenView__c" : "Combined",
"nihrm__Geolocation__c" : null,
"nihrm__HideBookingsFromPortal__c" : false,
"nihrm__IsActive__c" : true,
"nihrm__IsPlannerPortalEnabled__c" : false,
"nihrm__isRemoveCancelledEventsFromBEOs__c" : false,
"nihrm__ManagementAffliation__c" : "NI International",
"nihrm__NearestAirportCode__c" : "MHT",
"nihrm__Phone__c" : "(207) 555-5555",
"nihrm__PostalCode__c" : "04103",
"nihrm__PropertyCode__c" : "TCH",
"nihrm__RegionName__c" : "Northeast",
"nihrm__RestrictBookingMoveWithPickup__c" : true,
"nihrm__RohAllowedStatuses__c" : "Prospect;Tentative;Definite",
"nihrm__StateProvince__c" : "ME",
"nihrm__SystemOfMeasurement__c" : "Standard",
"nihrm__TimeZone__c" : "GMT-05:00 Eastern Daylight Time (America/New_York)",
"nihrm__UpdateBookingEventAverageChecks__c" : false,
"nihrm__UseAlternateLanguage__c" : false,
"nihrm__Website__c" : "www.thecityhotelweb.com"
} ],
"ObjectType" : "nihrm__Location__c",
"DeleteFirst" : false
},
这里是整个 json 的链接: https://codeshare.io/rGL6K5
【问题讨论】:
-
您应该显示您尝试解析的 json。错误可能是因为 json 是 JsonObject,而不是 JsonArray。
-
您可以尝试直接反序列化为
dynamic对象:var records = JsonConvert.DeserializeObject<dynamic>(File.ReadAllText(@"myfilepath"));。您需要显示相关的 JSON 以获得进一步的帮助。 -
@Equalsk 谢谢你,我要试一试,看看哪个最适合我。如果它运作良好,我会通知您,以便您提交答案!
-
@Equalsk 我已经尝试过了,但仍然无法访问 json 数据,请原谅我对此很陌生。我已经添加了我的 json 文件的部分内容
-
你能添加整个 JSON 字符串吗?或者,如果它真的很长,像所有不同的
nihrm_位一样删除了很多不必要的细节。很难仅对图片的一部分提供帮助。