我正在从某个端点获取tdata,并在序列化到我的类时遇到问题ID。我想将波纹管数据投射到我的班级,但无法了解该班级的结构。检查数据.....
{
"-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"
}
}
}
答案 0 :(得分:1)
如果从端点获取的数据具有动态结构,则可以使用键-值对集合或字典。例如:
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
属性的情况下反序列化对象的情况下,在某些情况下,如果您的模式来自配置文件而不是结构,这实际上是有利的。
答案 1 :(得分:0)
从下面的结构中汲取灵感:
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; }
}