Как разобрать вложенную JSON структуру данных в C# - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь проанализировать следующую 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;

Пожалуйста, помогите решить эту проблему.

1 Ответ

1 голос
/ 23 апреля 2020

Я изменил ваш 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.

Если ваши номера контрактов и идентификаторы документов обязательно всегда нумеруются c, вы можете ввести их как целые числа, а не строки (в этом случае они теряют кавычки в JSON)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...