#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 Это может быть проблемой с корпусом. Прочитайте мой ответ, или, если вы этого не хотите , измените Записи на записи, а метаданные на метаданные в моих классах