Использовать данные с этой конечной точки - PullRequest
0 голосов
/ 10 февраля 2019

Я получаю tdata с определенной конечной точки и идентификатор проблемы при сериализации в мои классы.Я хочу привести приведенные ниже данные в мой класс, но не могу понять, как должен быть структурирован класс.Проверьте данные .....

  {
    "-LYG_AI_oGYjNBrzMlKF": {
    "chatDispayText": "",
    "chatId": "-LYG_AI_oGYjNBrzMlKF",
    "chatName": "",
    "chattype": "single",
    "imageUrl": "https://wallpaper.wiki/wp-content/uploads/2017/04/wallpaper.wiki-Amazing-celebrities-hd-wallpaper-PIC-WPD004734.jpg",
    "lastMessageSent": "aiye",
    "lastMessageSentTime": 1549704416263,
    "synched": false,
    "users": {
    "-LYG_AIZ5MvTbjR7DACe": "Uicpm3L15TX0c15pKCI6KUEARyB3",
    "-LYG_AI_oGYjNBrzMlKE": "Xsr0z9lsqNOEytX61lJvaGz1A8F2"
    }
    }
}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Возьмите вдохновение от Структуры ниже:

public class Rootobject
{
    public LYG_AI_Ogyjnbrzmlkf LYG_AI_oGYjNBrzMlKF { get; set; }
}

public class LYG_AI_Ogyjnbrzmlkf
{
    public string chatDispayText { get; set; }
    public string chatId { get; set; }
    public string chatName { get; set; }
    public string chattype { get; set; }
    public string imageUrl { get; set; }
    public string lastMessageSent { get; set; }
    public long lastMessageSentTime { get; set; }
    public bool synched { get; set; }
    public Users users { get; set; }
}

public class Users
{
    public string LYG_AIZ5MvTbjR7DACe { get; set; }
    public string LYG_AI_oGYjNBrzMlKE { get; set; }
}
0 голосов
/ 10 февраля 2019

Если данные, которые вы получаете из конечной точки, имеют динамическую структуру, вы можете использовать коллекцию пар ключ-вейл или словарь.Например:

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 вручную, используя первый подход, и это на самом деле выгодно в определенных сценариях, когда ваша схема приходит из файла конфигурации, а не из структуры.

...