Добавьте значение в json в каждой записи

#c# #arrays #asp.net #json #.net

Вопрос:

У меня есть формат json, как показано ниже. В том, что у меня есть несколько записей, проверьте ниже json.

 {
   "metadata":{
      "TotalCount":11,
      "CurrentPageNumber":1,
   },
   "records":[
      {
         "offerId":"e1b75d86-67b1-4557-a381-5474383da3fb",
         "isContract":true,
         "transportRouteId":"e1b75d86-67b1-4557-a381-5474383da3fb",
         "transportOrderId":"SEZYMY-210720-010097",
         "schedule":null,
      },
]
}
 

Теперь я хочу добавить новое значение в каждый массив этих записей, так как я могу это сделать.

Я хочу добавить это значение : («carrierExpiredDate», (carrierExpiredDate.Соответствие требованиям.Значение).Дата);

Так что этот новый json должен выглядеть так.

 {
   "metadata":{
      "TotalCount":11,
      "CurrentPageNumber":1,
   },
   "records":[
      {
         "offerId":"e1b75d86-67b1-4557-a381-5474383da3fb",
         "isContract":true,
         "transportRouteId":"e1b75d86-67b1-4557-a381-5474383da3fb",
         "transportOrderId":"SEZYMY-210720-010097",
         "schedule":null,
         "carrierExpiredDate": (carrierExpiredDate.ComplianceExpiryDate.Value).Date)
      },
]
}
 

Комментарии:

1. Вы пишете в файл Json. Где он хранится?

2. @ziakhan Я получаю строку json таким образом : var json = ожидание ответа. Содержание. ReadAsStringAsync();

Ответ №1:

 var json = 
    @"{
   "metadata":{
      "TotalCount":11,
      "CurrentPageNumber":1,
   },
   "records":[
      {
         "offerId":"e1b75d86-67b1-4557-a381-5474383da3fb",
         "isContract":true,
         "transportRouteId":"e1b75d86-67b1-4557-a381-5474383da3fb",
         "transportOrderId":"SEZYMY-210720-010097",
         "schedule":null
      },
]
}";    

var jObject = JObject.Parse(json);
var jList=jObject["records"].Children().ToList();
foreach(var jtoken in jList)
{
   jtoken["carrierExpiredDat"] = (carrierExpiredDate.ComplianceExpiryDate.Value).Date));
}
   string output = Newtonsoft.Json.JsonConvert.SerializeObject(jObject, Newtonsoft.Json.Formatting.Indented);
 

Комментарии:

1. После цикла foreach мне нужно снова преобразовать это в строку json, потому что я попробовал ваш код, но не добавил новый узел в текущую строку json.

2. См.Отредактированный ответ. Проверьте, содержит ли вывод ваш новый ключ.

3. Результат работает так, как ожидалось. Проверь со своей стороны.

Ответ №2:

Попробуй это. Код был протестирован с помощью Visual Studio и Postman

 .....
var expDate=DateTime.Now;

var json = await response.Content.ReadAsStringAsync()
var deserializedJson = JsonConvert.DeserializeObject<TransportRoot>(json);
deserializedJson.Records.ForEach(i=> i.carrierExpiredDate=expDate);
var newJson= JsonConvert.SerializeObject(deserializedJson);
 

классы

    public class Metadata
   {
       public int TotalCount { get; set; }
       public int CurrentPageNumber { get; set; }
   }

   public class Record
   {
       public string offerId { get; set; }
       public bool isContract { get; set; }
       public string transportRouteId { get; set; }
       public string transportOrderId { get; set; }
       public object schedule { get; set; },
     public object carrierExpiredDate { get; set; }
   }

   public class TransportRoot
   {
       public Metadata Metadata { get; set; }
       public List<Record> Records { get; set; }
   }
 

если у вас возникли проблемы с json в случае верблюда, я настоятельно рекомендую изменить ваш запуск

     services.AddControllers()
   // or services.AddControllersWithViews()
            .AddNewtonsoftJson(options =>
            options.SerializerSettings.ContractResolver =
            new CamelCasePropertyNamesContractResolver());
 

Комментарии:

1. Я получаю эту ошибку : объект задания не содержит определения для «Записей»

2. @Nic ты пользовался моими занятиями? Этот код был протестирован, и все работает. И я не знаю, что такое работа. У меня нет своего кода. Пожалуйста, объясните.

3. @Nic Это может быть проблемой с корпусом. Прочитайте мой ответ, или, если вы этого не хотите , измените Записи на записи, а метаданные на метаданные в моих классах