Как объединить два объекта Json в Asp.Net - PullRequest
0 голосов
/ 05 декабря 2018

This one is of otherThis one is the outputThis is what i am getting in lstrngThis is what i am getting in a Как объединить результат Json(new{lstrng,a}, JsonRequestBehavior.AllowGet);.Я хочу видеть результат lstrng и коллективно.Мой код

var a = this.abc();  
JsonResult json =Json(new{lstrng,a}, JsonRequestBehavior.AllowGet);  
json.MaxJsonLength = int.MaxValue;  
return json;

здесь abc - другой метод, а lstrng - результат текущего метода

public JsonResult gFbrRecord()
    {
        DataSet ds = dblayer.gfbrdata();
        //this is for getordert tart
        List<fbrData> lstrng = new List<fbrData>(10000);
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            lstrng.Add(new fbrData
            {  
               FBRInvoiceNumber = dr["FBR_NUM"] != DBNull.Value ? Convert.ToString(dr["FBR_NUM"]) : Convert.ToString(""),
                POSID = dr["REG_NUM"] != DBNull.Value ? Convert.ToInt32(dr["REG_NUM"]) : Convert.ToInt32(0),
               });               

        }

        var a = this.abc();                 
        JsonResult json =Json(new{lstrng,a}, JsonRequestBehavior.AllowGet);
        json.MaxJsonLength = int.MaxValue;
        return json;
    }
     public JsonResult abc() {
        DataSet ds = dblayer.gfbrdata();
        List<fbr1> lstrng = new List<fbr1>(10000);
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            lstrng.Add(new fbr1
            {  
                DetailSerialNo = dr["SRL_NUM"] != DBNull.Value ? Convert.ToInt32(dr["SRL_NUM"]) : Convert.ToInt32(0),                   
                ItemCode = dr["ITM_COD"] != DBNull.Value ? Convert.ToString(dr["ITM_COD"]) : Convert.ToString(""),
              });

        }

        JsonResult json = Json(lstrng, JsonRequestBehavior.AllowGet);
        json.MaxJsonLength = int.MaxValue;
        return json;
    }
}

This one is the output i am getting not

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вам необходимо запросить оба списка и выбрать несколько элементов из второго списка, которые имеют одинаковый идентификатор с одним элементом в первом списке

public JsonResult gFbrRecord()
    {
        DataSet ds1 = dblayer.gfbrdata();
        List<fbrData> lstrng1 = new List<fbrData>(10000);

        //Your other stuff here

        DataSet ds2 = dblayer.gfbrdata();
        List<fbr1> lstrng2 = new List<fbr1>(10000);

        //Your other stuff here

        var result = (from item1 in lstrng1
                      select new
                      {
                          FBRInvoiceNumber = item1.FBRInvoiceNumber,
                          POSID = item1.POSID,
                          SRL_NUM = item1.SRL_NUM,
                          Data = (from item2 in lstrng2
                                  where item2.SRL_NUM == item1.SRL_NUM
                                  select new
                                  {
                                      DetailSerialNo = item2.DetailSerialNo,
                                      ItemCode = item2.ItemCode
                                  }).ToList()
                      }).ToList();

        return Json(result, "application/json", JsonRequestBehavior.AllowGet);
    }

Альтернатива

В основном я предоставляю вам пример кода, который должен работать для объединения двух объектов json

1) Этот метод извлекает записи из базы данных и заполнить список, и затем из этого списка будет создана JToken

public static JToken Method1()
{
    DataSet ds = dblayer.gfbrdata();
    List<fbrData> lstrng = new List<fbrData>(10000);

    //Your other stuff here

    JToken jToken = JToken.FromObject(lstrng);
    return jToken;
}

JToken возврат по вышеуказанному методу выглядит как

[
  {
    "FBRInvoiceNumber": "ABC",
    "POSID": 110034,
    "SRL_NUM": 123
  },
  {
    "FBRInvoiceNumber": "PQR",
    "POSID": 210035,
    "SRL_NUM": 456
  }
]

2) Этот метод также аналогичен описанному выше методу, но единственное отличие состоит в том, что этот метод извлекает записи из базы данных, отличной от вышеуказанного метода.

public static JToken Method2()
{
    DataSet ds = dblayer.gfbrdata();
    List<fbr1> lstrng = new List<fbr1>(10000);

    //Your other stuff here

    JToken jToken = JToken.FromObject(lstrng);
    return jToken;
}

JToken возвращаемый вышеописанным методом выглядит как

[
  {
    "DetailSerialNo": 8,
    "ItemCode": "700275",
    "SRL_NUM": 123
  },
  {
    "DetailSerialNo": 9,
    "ItemCode": "800279",
    "SRL_NUM": 456
  }
]

3) Теперь функция ниже может объединять каждый из объектов в обоих массивах по одному и тому же индексу.

Поскольку вы упомянули в комментарии выше, что

вы хотите объединить каждый ваш объект в обоих массивах по одному ключу свойства SRL_NUM значение.

public static JToken Concat(JToken jToken1, JToken jToken2)
{
    JArray jArray = new JArray();

    foreach (JObject jObject1 in jToken1.ToObject<JArray>())
    {
        var value1 = jObject1.Properties().Where(x => x.Name == "SRL_NUM").FirstOrDefault().Value;

        foreach (JObject jObject2 in jToken2.ToObject<JArray>())
        {
            var value2 = jObject2.Properties().Where(x => x.Name == "SRL_NUM").FirstOrDefault().Value;

            if (Convert.ToInt32(value1) == Convert.ToInt32(value2))
            {
                jObject1.Merge(jObject2, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat });
                jArray.Add(jObject1);
            }
        }
    }

    return jArray;
}

4) Тогда йоВы можете использовать вышеуказанный метод для вашего метода действия

public ContentResult gFbrRecord()
{
    JToken jToken1 = Method1();
    JToken jToken2 = Method2();

    var result = Concat(jToken1, jToken2);

    return Content(result.ToString(), "application/json");
}

Вывод:

enter image description here

Edit1:

Если ваш массив содержит более одного SRL_NUM во втором массиве, то приведенный ниже метод может объединить все элементы с одинаковым SRL_NUM с первым элементом массива с таким же SRL_NUM.

public static JToken Concat(JToken jToken1, JToken jToken2)
{
    JArray jArray = new JArray();

    foreach (JObject jObject1 in jToken1.ToObject<JArray>())
    {
        var value = jObject1.Properties().Where(x => x.Name == "SRL_NUM").FirstOrDefault().Value;

        var result = jToken2.ToObject<JArray>().ToObject<JObject[]>().Properties().Where(x => x.Name == "SRL_NUM" && Convert.ToInt32(x.Value) == Convert.ToInt32(value)).Select(x => x.Parent);

        JArray jAr = new JArray();

        foreach (JObject obj in result)
        {
            jAr.Add(obj);
        }

        JObject jObject = new JObject();

        jObject.Merge(jObject1, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat });
        jObject.Add("Data", jAr);

        jArray.Add(jObject);
    }

    return jArray;
}

Выход:

enter image description here

0 голосов
/ 05 декабря 2018

Полагаю, вам просто нужен результат списка, просто объедините a и lstrng ??
a.Data.AddRang(lstrng.Data) Этот код объединит два из arr, и вам нужно определить список a.Data в вашей модели lstrng.

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