c# - 如何在 C# 中解析嵌套的 JSON 数据结构
问题描述
我正在尝试解析以下 JSON 数据结构:
{
Command: "somecommand",
ContractNo: "11111111",
DocsFiles: [{DocumentID: "01", Files: [{DocKey: "Key01", PrimKey: "PKey01"},
{DocKey: "Key01", PrimKey: "PKey02"}],
{DocumentID: "02", Files: [{DocKey: "Key02", PrimKey: "PKey03"},
{DocKey: "Key02", PrimKey: "PKey04"}]]
}
这是一个代码:
public class Result
{
public string DocumentID {get; set;}
public List<Files> FilesList {get; set;}
public class Files
{
public string DocKey {get; set;}
public string PrimKey {get; set;}
}
}
private void shareDocumentFiles(RequestContext pContext)
{
try
{
string vContractNo = pContext.JsonParameters["ContractNo"].ToString();
var vFiles = pContext.JsonParameters["DocsFiles"].ToString();
var results = JsonConvert.DeserializeObject<List<Result>>(vFiles);
...
我可以获得“DocumentID”值,但无法获得“DocKey”或“PrimKey”值。
var DocID = results[0].DocumentID;
请帮助解决这个问题。
解决方案
我将您的 JSON 更改为:
{
"Command": "somecommand",
"ContractNo": "11111111",
"DocsFiles": [
{
"DocumentID": "01",
"Files": [
{
"DocKey": "Key01",
"PrimKey": "PKey01"
},
{
"DocKey": "Key01",
"PrimKey": "PKey02"
}
]
},
{
"DocumentID": "02",
"Files": [
{
"DocKey": "Key02",
"PrimKey": "PKey03"
},
{
"DocKey": "Key02",
"PrimKey": "PKey04"
}
]
}
]
}
然后我创建了三个简单的匹配类:
public class InputClass
{
public string Command { get; set; }
public string ContractNo { get; set; }
public List<DocFile> DocFiles { get; set; }
}
public class DocFile
{
public string DocumentID { get; set;}
public List<FileInfo> Files { get; set; }
}
public class FileInfo
{
public string DocFile { get; set;}
public string PrimKey { get; set; }
}
然后我阅读了 JSON 的内容并使用以下方法对其进行反序列化:
var fileContents = File.ReadAllText("DocFiles.json");
var docFiles = JsonConvert.DeserializeObject<DocFile>(fileContents);
它就像一个魅力。请注意,您DocFiles
是一个集合,就像DocKey
/PrimKey
对一样。
如果您的合同编号和文档 ID 必须始终为数字,您可能希望将它们键入为整数而不是字符串(在这种情况下,它们会丢失 JSON 中的引号)
推荐阅读
- android - 来自 Google Play 控制台的主机名验证程序警告
- c++ - 我怎样才能只运行一个文件而不影响其他文件
- koa - 在 Koa 中,我可以在中间件调用时访问 Koa-router 上下文吗?
- python - 我需要制作一个程序,该程序不仅可以打印结果,还可以打印该金额的计算方式
- opencv - 我想以一定的时间间隔使用opencv从网络摄像头捕获图像
- flutter - 颤振| Dio:无效参数(值):不能为空
- google-apps-script - 如何最好地循环某些列中的每一行以从 Google 表格创建 Google 日历事件
- gpu - COS 安装 GPU 下载驱动签名失败
- android - 如何解析 PhoneAuthOptions 符号
- android - 如何避免在textview中换行