#c# #json #api #asp.net-core #url
Вопрос:
После запроса API я получаю файл JSON(родительский) с некоторыми URL-адресами других файлов JSON(дочерних). Можно ли загрузить все файлы и преобразовать дочерние файлы в объекты JSON в родительском файле?
Это очень ASP.Net Приложение Core 3.1, написанное на C#.
Пример Ввода:
[
{
"title": "AAA",
"dates": [
{
"a_date": "24.09.2021",
"push": false,
"date_url": "https://www-api.aaa.com/api/HEUFCCEWJHB=.json"
},
{
"a_date": "27.09.2021",
"push": false,
"date_url": "https://www-api.aaa.com/api/VFEWVWEWXS=.json"
}
]
},
{
"title": "BBB",
"dates": [
{
"a_date": "24.10.2021",
"push": false,
"date_url": "https://www-api.aaa.com/api/HBTFDECEC=.json"
},
{
"a_date": "27.10.2021",
"push": false,
"date_url": "https://www-api.aaa.com/api/EWFEWIFWEW=.json"
}
]
}
]
Ожидаемые результаты:
[
{
"title": "AAA",
"dates": [
{
"a_date": "24.09.2021",
"push": false,
"date_url": [
{
"aa": "xx",
"bb": false,
},
{
"aa": "zzz",
"cc": true,
}
]
},
{
"a_date": "27.09.2021",
"push": false,
"date_url": [
{
"aa": "xx",
"bb": false,
},
{
"aa": "zzz",
"cc": true,
}
]
}
]
},
{
"title": "BBB "
...
}
]
По желанию:
В конце родительский JSON должен быть разделен на разные файлы JSON по названию.
Комментарии:
1. Вы хотите, чтобы он использовался
Newtonsoft.Json
илиSystem.Text.Json
?2. Кроме того, как следует делать веб-запросы? Используете ли вы определенный метод, нужны ли вам какие-либо пользовательские заголовки?
3. Что вы
"aa","bb","cc"
подразумеваете под Ожидаемым результатом?4. @trinalbadger587 Я предпочитаю Newtonsoft.Json. Это простой http-запрос, в котором требуются любые пользовательские заголовки.
5. @YiyiYou, это всего лишь образец данных о ребенке
Ответ №1:
Вы можете попробовать этот конвертер:
public class UrlDownloaderConverter : JsonConverter<object>
{
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> JsonSerializer.Deserialize(DownloadJson(reader.GetString()), typeToConvert, options);
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
=> JsonSerializer.Serialize(writer, value, value.GetType(), options);
public static string DownloadJson(string url)
{
using (HttpClient httpClient = new HttpClient())
using (HttpResponseMessage msg = httpClient.GetAsync(url).Result)
using (HttpContent content = msg.Content)
return content.ReadAsStringAsync().Resu<
}
}
Комментарии:
1. Спасибо вам за ваш ответ. Есть и другая проблема: имена объектов в дочерних JSONs разные, поэтому я не могу сопоставить их с моделью.
2. @AlexanderS., Я не понимаю, что вы имеете в виду. Кроме того, я не знаю
Newtonsoft.Json
, поэтому не могу вам в этом помочь.3. Вместо «aa», «bb», «cc»могут быть сотни других имен. Я не могу добавить их все в модель.
4. @AlexanderS., вам придется задать это в отдельном вопросе, так как я не знаю контекста, но из того, что вы мне сказали, я понятия не имею. Вам, вероятно, придется написать пользовательский конвертер, чтобы преобразовать его в нужный вам объект.
5. ОК. Спасибо вам за вашу помощь! Теперь у меня есть идея, как я могу ее решить. Может быть, я опубликую это позже.