Если данные, которые вы получаете из конечной точки, имеют динамическую структуру, вы можете использовать коллекцию пар ключ-вейл или словарь.Например:
JObject jObject = JObject.Parse(Data); // This would already give you a key-value pair collection
Dictionary<String,Object> collection = new Dictionary<String, Object>();
foreach(var obj in jObject){
collection.Add(obj.Key, obj.Value);
}
Однако это не типизированный подход, который означает, что он неэффективен в большинстве сценариев.Лучшим решением при работе с конечными точками было бы определить класс с фиксированной схемой, фактически тем, что вам нужно в вашем коде, а затем сопоставить класс с объектом, полученным конечной точкой, с использованием структуры метаданных.Например:
public class ChatInfoModel
{
[JsonProperty(Metadata.ChatId)]
public long ChatId { get; set; }
[JsonProperty(Metadata.ChatId, Required = Required.AllowNull)]
public String Message { get; set; }
}
public struct Metadata
{
public const String ChatId = "userChatId";
public const String Message = "messageTxt";
}
А затем
var deserializedObject = JsonConvert.DeserializeObject<ChatInfoModel>(data);
Однако, если ваш класс имеет точно такое же соглашение об именах (но не обязательно должно следовать соглашению об именах camelCase) для его свойств, как вдля сериализованных данных атрибут JsonProperty
не понадобится.
Вы также можете десериализовать объект, не используя атрибут JsonProperty
вручную, используя первый подход, и это на самом деле выгодно в определенных сценариях, когда ваша схема приходит из файла конфигурации, а не из структуры.