Member 13284316 Ответов: 2

Добавьте одну строку json к другой как дочерний элемент C#


У меня есть две строки json, как показано ниже
{
  "account-Ind": "A",
  "multipage-Ind": " ",
  "relat-Ch-St-Nmbr": "0000001",
  "relat-Claim-Nmbr": "0000000",
  "schg-Remit-Flag": " ",
  "schg-Mgcare": "000000000",
  "schg-Co-Pay": "000000000",
  "schg-Deductible": "000000000",
  "schg-Co-Ins": "000000000",
  "schg-Payment": "000000000",
  "schg-Tot-Claim": "000000000",
  "schg-Elig": " ",
  "filler1": "                                                  "
}


а это вторая строка json
{
  "message-Code-1": "    ",
  "msg-Number-Pos1-1": " ",
  "msg-Number-Pos2-1": " ",
  "msg-Number-Pos3-1": " ",
  "message-Code-2": "    ",
  "msg-Number-Pos1-2": " ",
  "msg-Number-Pos2-2": " ",
  "msg-Number-Pos3-2": " ",
  "message-Code-3": "    ",
  "msg-Number-Pos1-3": " ",
  "msg-Number-Pos2-3": " ",
  "msg-Number-Pos3-3": " ",
  "message-Code-4": "    ",
  "msg-Number-Pos1-4": " ",
  "msg-Number-Pos2-4": " ",
  "msg-Number-Pos3-4": " "
}

Мне нужен вывод, как показано ниже
{
  "account-Ind": "A",
  "multipage-Ind": " ",
  "relat-Ch-St-Nmbr": "0000001",
  "relat-Claim-Nmbr": "0000000",
  "schg-Remit-Flag": " ",
  "schg-Mgcare": "000000000",
  "schg-Co-Pay": "000000000",
  "schg-Deductible": "000000000",
  "schg-Co-Ins": "000000000",
  "schg-Payment": "000000000",
  "schg-Tot-Claim": "000000000",
  "schg-Elig": " ",
  "filler1": "                                                  ",
  "message-Table":
    {
      "message-Code-1": "0000",
      "msg-Number-Pos1": "1",
      "msg-Number-Pos2": "1",
      "msg-Number-Pos3": "1",    
      "message-Code-2": "0001",
      "msg-Number-Pos1": "2",
      "msg-Number-Pos2": "1",
      "msg-Number-Pos3": "1",   
      "message-Code-3": "0002",
      "msg-Number-Pos1": "2",
      "msg-Number-Pos2": "1",
      "msg-Number-Pos3": "1",   
      "message-Code-4": "0004",
      "msg-Number-Pos1": "2",
      "msg-Number-Pos2": "1",
      "msg-Number-Pos3": "1", 
      "message-Code-5": "0005",
      "msg-Number-Pos1": "2",
      "msg-Number-Pos2": "1",
      "msg-Number-Pos3": "1"
    }
 
}


Что я уже пробовал:

var javaScriptSerializer = new JavaScriptSerializer();
                var userDetails = javaScriptSerializer.DeserializeObject(json1);
                var messageTable = javaScriptSerializer.DeserializeObject(json2);
                var arrayOfObjects = JsonConvert.SerializeObject(
                      new[] { JsonConvert.DeserializeObject(json1), JsonConvert.DeserializeObject(json2) });
                return arrayOfObjects;

But I getting result like below 

[
  {
    "account-Ind": "A",
    "multipage-Ind": " ",
    "relat-Ch-St-Nmbr": "0000001",
    "relat-Claim-Nmbr": "0000000",
    "record-Type": "1",
    "record-Seq": "0000",
    "cert-Nmbr": "109085006",
    "provider-Charge": "000035000",
    "int-Amount-Paid": "0000000",
    "clm-Account-Nmbr": "HNY1002     ",
    "alt-Id": "931929156",
    "schg-Elig": " ",
    "filler1": "                                                  "
  },
  {
    "message-Code-1": "    ",
    "msg-Number-Pos1-1": " ",
    "msg-Number-Pos2-1": " ",
    "msg-Number-Pos3-1": " ",
    "message-Code-2": "    ",
    "msg-Number-Pos1-2": " ",
    "msg-Number-Pos2-2": " ",
    "msg-Number-Pos3-2": " ",
    "message-Code-3": "    ",
    "msg-Number-Pos1-3": " ",
    "msg-Number-Pos2-3": " ",
    "msg-Number-Pos3-3": " ",
    "message-Code-4": "    ",
    "msg-Number-Pos1-4": " ",
    "msg-Number-Pos2-4": " ",
    "msg-Number-Pos3-4": " ",
    "message-Code-5": "    ",
    "msg-Number-Pos1-5": " ",
    "msg-Number-Pos2-5": " ",
    "msg-Number-Pos3-5": " "
  }
]

2 Ответов

Рейтинг:
4

Andy Lanng

Учитывая, что вы не можете десериализоваться в класс (по какой-то неизвестной причине), попробуйте этот хак:

var result = json1.Insert(json1.indexOf("}"),json2)


Member 13284316

Привет, Энди, ваш вышеприведенный пример действительно объединил json, но не смог просмотреть его в JSON viewer, так как в выходном файле была ошибка. Если вы обратите внимание на вывод, который я требую в своем вопросе, вы можете найти "message-Table": перед "{".
Не могли бы вы помочь мне добавить это? Спасибо.

Andy Lanng

затем var result = json1.Insert(json1.indexOf("}"),", message-Table: " + json2)

Возможно, вам придется поиграть со строкой, но это всего лишь манипуляция строкой. Посмотрите на result и отрегулируйте соответственно. встретимся на полпути!

Member 13284316

Привет, Энди, даже я сделал то же самое. Спасибо.

Рейтинг:
1

Andy Lanng

Есть несколько способов добиться этого.

Во-первых, это как вы уже сделали и возвращаете массив объектов. Очевидно, вам нужно было бы знать, какой объект, что и что в массиве.
Вы неявно создали массив из двух объектов в вашем примере, так что это то, что вы получаете.

Второе и третье означают, что вам нужно де-сериализовать объект(ы) json и добавить второй к третьему одним из двух способов:

Вы можете либо добавить sting, предоставив вам объект Json для десериализации со строковым параметром, который также должен быть десериализован. Этот метод имеет свое применение, но я не думаю, что это то, что вы хотите. В любом случае, процесс аналогичен последнему варианту:

Десериализуйте объект 1 в класс (который вы определяете). Одно из полей класса - это объект (или строка, см. выше), в который десериализуется объект 2. Т.Е.:


class Object1 {
    [JsonProperty("account-Ind")]
    public string AccountInd {get;set;}
    [JsonProperty("multipage-Ind")]
    public string MultipageInd {get;set;}
    [JsonProperty("relat-Ch-St-Nmbr")]
    public string RelatChStNmbr {get;set;}
    [JsonProperty("relat-Claim-Nmbr")]
    public string RelatClaimNmbr {get;set;}
    [JsonProperty("record-Type")]
    public string RecordType {get;set;}
    [JsonProperty("record-Seq")]
    public string RecordSeq {get;set;}
    [JsonProperty("cert-Nmbr")]
    public string CertNmbr {get;set;}
    [JsonProperty("provider-Charge")]
    public string ProviderCharge {get;set;}
    [JsonProperty("int-Amount-Paid")]
    public string IntAmountPaid {get;set;}
    [JsonProperty("clm-Account-Nmbr")]
    public string ClmAccount-Nmbr {get;set;}
    [JsonProperty("alt-Id")]
    public string AltId {get;set;}
    [JsonProperty("schg-Elig")]
    public string SchgElig {get;set;}
    [JsonProperty("filler1")]
    public string Filler1 {get;set;}
    [JsonProperty("message-Table")]
    public Object2[] MessageTable {get;set;}
}


var javaScriptSerializer = new JavaScriptSerializer();
                var userDetails = javaScriptSerializer.DeserializeObject<Object1>(json1);
                var messageTable = javaScriptSerializer.DeserializeObject<Object2>(json2);
                userDetails.MessageTable = messageTable;
                return userDetails;  //or JavaScriptSerializer.Serialize(userDetails);



Я не указывал Объект 2, вы поняли идею.

Я указал, что MessageTable должен быть массивом. Я думаю, что у вас возникнут проблемы, если у вас есть несколько полей с одинаковым именем в одном объекте

Надеюсь, этого будет достаточно, чтобы вы отправились в путь.

Энди ^_^


Member 13284316

В моем случае я не могу подготовить класс отдельно. Есть ли какой-то способ, с помощью которого я могу получить необходимый результат без подготовки класса?

Andy Lanng

Ну, я думаю, вы могли бы попробовать некоторые прямые манипуляции со строками : решение 2