![](/img/trans.png)
[英]Efficient Manual Deserialization of Nested objects from Json using Newtonsoft in c#
[英]Accessing deeply nested JSON objects in c# using NewtonSoft Deserialization
我很難到達JSON中一些深層嵌套的對象
我有一個目錄,其中包含大約500個需要讀取的JSON文件,並從中輸出某些數據,因此我按以下方式加載文件:
public static void getJsonFiles()
{
int i = 0;
string directory = @"Z:\My_JSON_FILES\DataFilesForAnalysis\DataFilesAsJSON";
string[] jsonPath = Directory.GetFiles(directory, "*.json");
foreach(string item in jsonPath)
{
jsonReader(item, i);
i++;
}
}
加載文件后,我將通過File.ReadAllText進行讀取,因此我可以這樣做:
public static void jsonReader(string item, int i)
{
string readJson = File.ReadAllText(item);
RootObject rootObj = JsonConvert.DeserializeObject<RootObject>(readJson);
var resReport = rootObj.ResultsReport;
...
我已經使用json2csharp創建了所有JSON的對象,但是當我嘗試使用點表示法(rootObj.ResultsReport.FinalReport.VariantProperties.VariantProperty.VariantName)
訪問深度嵌套的對象時,出現錯誤消息“對象不包含定義對於FinalReport,沒有擴展方法FinalReport ...”
我的對象定義如下:
public class VariantProperty
{
public string geneName { get; set; }
public string isVUS { get; set; }
public string variantName { get; set; }
}
public class VariantProperties
{
public string[] VariantProperty { get; set; }
}
public class FinalReport
{
public Object Application { get; set; }
public string ReportId { get; set; }
public string SampleName { get; set; }
public string Version { get; set; }
public Object Sample { get; set; }
public string PertinentNegatives { get; set; }
public Object Summaries { get; set; }
public Object VariantProperties { get; set; }
public Object Genes { get; set; }
public Object Trials { get; set; }
public Object References { get; set; }
public Object Signatures { get; set; }
public Object AAC { get; set; }
}
public class ResultsReport
{
public Object FinalReport { get; set; }
public Object VariantReport { get; set; }
}
public class RootObject
{
public Object ResultsReport { get; set; }
}
JSON如下所示:
"ResultsReport": {
"CustomerInformation": null,
"FinalReport": {
"@xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
"@StagingId": "XXXXXXXX",
"@clinicalId": "XXXXXXXX",
"Application": {
"ApplicationSettings": {
"ApplicationSetting": {
"Name": "Statement",
"Value": "XXXXXXXX"
}
}
},
"ReportId": "XXXXXXXX",
"SampleName": "XXXXXXXX",
"Version": "1",
"Sample": {
"FM_Id": "XXXXXXXX",
"SampleId": "XXXXXXXX",
"BlockId": "XXXXXXXX",
"TRFNumber": "XXXXXXXX",
"TestType": "XXXXXXXX",
"SpecFormat": "XXXXXXXX",
"ReceivedDate": "XXXXXXXX"
},
"PertinentNegatives": null,
"Summaries": {
"@alterationCount": "XXXXXXXX",
"@clinicalTrialCount": "XXXXXXXX",
"@resistiveCount": "XXXXXXXX",
"@sensitizingCount": "XXXXXXXX"
},
"VariantProperties": {
"VariantProperty": [
{
"@geneName": "BARD1",
"@isVUS": "true",
"@variantName": "P358_S364del"
},
{
"@geneName": "GATA2",
"@isVUS": "true",
"@variantName": "P161A"
},
{
"@geneName": "LRP1B",
"@isVUS": "true",
"@variantName": "V4109I"
},
{
"@geneName": "MLL2",
"@isVUS": "true",
"@variantName": "P1191L"
},
{
"@geneName": "NTRK1",
"@isVUS": "true",
"@variantName": "G18E"
},
{
"@geneName": "NUP98",
"@isVUS": "true",
"@variantName": "A447T"
},
{
"@geneName": "TET2",
"@isVUS": "true",
"@variantName": "D1121Y"
},
{
"@geneName": "WT1",
"@isVUS": "true",
"@variantName": "T377_G397>S"
}
]
}
我究竟做錯了什么? 我遵循了很多不同的例子,但它似乎無法正常工作
寫像
public ResultsReport ResultsReport { get; set; }
public FinalReport FinalReport { get; set; }
您使用對象作為屬性類型,那是錯誤的,這與JSON反序列化無關。
正如Volkan所說,問題不是JSON反序列化。 我通過像這樣構造類來使json工作:
public class VariantProperty
{
public string geneName { get; set; }
public string isVUS { get; set; }
public string variantName { get; set; }
}
public class VariantProperties
{
public List<VariantProperty> VariantProperty { get; set; }
}
public class FinalReport
{
public Object Application { get; set; }
public string ReportId { get; set; }
public string SampleName { get; set; }
public string Version { get; set; }
public Object Sample { get; set; }
public string PertinentNegatives { get; set; }
public Object Summaries { get; set; }
public VariantProperties VariantProperties { get; set; }
public Object Genes { get; set; }
public Object Trials { get; set; }
public Object References { get; set; }
public Object Signatures { get; set; }
public Object AAC { get; set; }
}
public class ResultsReport
{
public FinalReport FinalReport { get; set; }
}
public class RootObject
{
public ResultsReport ResultsReport { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.