#c# #.net #asp.net-core #asp.net-core-2.0 #asp.net-core-3.1
#c# #.net #asp.net-core #asp.net-core-2.0 #asp.net-ядро-3.1
Вопрос:
Мне нужна небольшая помощь, чтобы создать класс C # для отображения ниже ответа json из FCM token info api (https://developers.google.com/instance-id/reference/server#get_information_about_app_instances ):
{
"application": "com.chrome.windows",
"subtype": "wp:www.mydomain.com/#A1249A346-7458-45BB-A0F2-2AC4856BB-V2",
"scope": "*",
"authorizedEntity": "8212312155",
"rel": {
"topics": {
"topic1": {
"addDate": "2020-12-06"
}
}
},
"platform": "BROWSER"
}
Где topic1 — это не имя свойства, а значение, а темы, которые являются именем свойства, содержат список тем.
На самом деле я не уверен, как представлять темы в приведенном выше json.
Комментарии:
1.
public Dictionary<string, Topic> Topics {get;set;}
2. Меню вставки Visual Studio => Вставить специальное -> Вставить Json как классы
3. Если вы хотите улучшить именование свойств, вы можете изменить их по своему усмотрению и добавить [JsonProperty(«topic1»)] над свойством. Таким образом, вы не получите никаких ошибок при сериализации
Ответ №1:
Это формат словаря.
public Dictionary<string, Topic> Topics {get;set;}
Класс выглядит так, как показано ниже:
public class Root
{
public string application { get; set; }
public string subtype { get; set; }
public string scope { get; set; }
public string authorizedEntity { get; set; }
public Rel rel { get; set; }
public string platform { get; set; }
}
public class Rel
{
public Dictionary<string, Topic> topics { get; set; }
}
public class Topic
{
public string addDate { get; set; }
}
Приведенный выше json может быть сериализован из приведенной ниже модели:
var root = new Root
{
application = "com.chrome.windows",
subtype = "wp:www.mydomain.com/#A1249A346-7458-45BB-A0F2-2AC4856BB-V2",
scope = "*",
authorizedEntity = "8212312155",
rel = new Rel
{
topics = new Dictionary<string, Topic>
{
{
"topic1",
new Topic
{
addDate = "2020-12-06"
}
}
}
},
platform = "BROWSER"
};
Ответ №2:
public class Topic1 {
public string addDate { get; set; }
}
public class Topics {
public Topic1 topic1 { get; set; }
}
public class Rel {
public Topics topics { get; set; }
}
public class Root {
public string application { get; set; }
public string subtype { get; set; }
public string scope { get; set; }
public string authorizedEntity { get; set; }
public Rel rel { get; set; }
public string platform { get; set; }
}
Если вы уверены, что разделы содержат уникальные имена разделов, поэтому используйте словарь, если не уверены, то перечислите
Комментарии:
1. Разделы содержат уникальные имена разделов, но разделы могут содержать любое количество разделов. Итак, у нас не может быть класса, подобного Topic1
2. @Ivan Я проголосовал против.. Легко преобразовать некоторую заданную строку Json 1: 1 с помощью онлайн-инструментов, но это не отвечает на вопрос. Темы могут содержать несколько именованных элементов, которые не могут быть представлены напрямую. На самом деле для этого требуется словарь <строка,строка> элементов.. В нем будет одна запись для приведенной выше строки Json с ключом с именем «Topic1». Пол Майклс написал хороший учебник по разбору вашей строки Json и добавлению элементов словаря. для каждой из тем: pmichaels.net/2016/12/26 /…
3. Я понял, чего хочет Ахмед чуть позже 🙂 Конечно, было бы неплохо использовать dictionary, но у меня не было времени обновлять код. Итак, ваш минус один верен.