获取名称以数字开头的对象的属性的值
Get the value of the property of the object whose name begins with a number
我正在从网站获取数据,returns 我是 字符串 中的一个对象,如下所示:
{
index: 1,
commentNumber: 20,
feedComments: {
3465665: {
text: "I do not agree",
likeRatio: 0
},
6169801: {
text: "Hello",
likeRatio: 12
},
7206201: {
text: "Great job!",
likeRatio: 5
}
}
}
我想把它作为一个对象来使用,这很容易做到,我就这样做:
string objectString = GetData(); // Artificial GetData() method
dynamic data = JObject.Parse(objectString);
现在我可以使用 dynamic
轻松地从这个对象中获取我想要的所有属性
现在问题很明显了,我想获取名称以数字开头的属性(我获取的对象数据结构就是这样设计的)。但是 property/field 从对象中获取的名称不能以数字开头。
int commentNumber = data.commentNumber; // Works fine
string commentText = data.feedComments.3465665.text; // Obviously won't compile
有什么办法吗?
请注意,我想处理我获取的数据,因为它是一个对象,我知道我从 GetData() 方法 returns 使用一些正则表达式或其他东西,但这是我想避免的事情。
您真的应该将 JSON 解析为具体的 C# 类。 Dynamic 很慢并且容易受到难以检测的运行时错误的影响。
评论将进入字典。例如:
public class Root
{
public int Index { get; set; }
public int CommentNumber { get; set; }
public Dictionary<long, FeedComment> FeedComments { get; set; }
}
public class FeedComment
{
public string Text { get; set; }
public int LikeRatio { get; set; }
}
像这样反序列化:
var result = JsonConvert.DeserializeObject<Root>(objectString);
现在您可以很容易地访问评论:
var commentText = result.FeedComments[3465665].Text
我正在从网站获取数据,returns 我是 字符串 中的一个对象,如下所示:
{
index: 1,
commentNumber: 20,
feedComments: {
3465665: {
text: "I do not agree",
likeRatio: 0
},
6169801: {
text: "Hello",
likeRatio: 12
},
7206201: {
text: "Great job!",
likeRatio: 5
}
}
}
我想把它作为一个对象来使用,这很容易做到,我就这样做:
string objectString = GetData(); // Artificial GetData() method
dynamic data = JObject.Parse(objectString);
现在我可以使用 dynamic
轻松地从这个对象中获取我想要的所有属性现在问题很明显了,我想获取名称以数字开头的属性(我获取的对象数据结构就是这样设计的)。但是 property/field 从对象中获取的名称不能以数字开头。
int commentNumber = data.commentNumber; // Works fine
string commentText = data.feedComments.3465665.text; // Obviously won't compile
有什么办法吗?
请注意,我想处理我获取的数据,因为它是一个对象,我知道我从 GetData() 方法 returns 使用一些正则表达式或其他东西,但这是我想避免的事情。
您真的应该将 JSON 解析为具体的 C# 类。 Dynamic 很慢并且容易受到难以检测的运行时错误的影响。 评论将进入字典。例如:
public class Root
{
public int Index { get; set; }
public int CommentNumber { get; set; }
public Dictionary<long, FeedComment> FeedComments { get; set; }
}
public class FeedComment
{
public string Text { get; set; }
public int LikeRatio { get; set; }
}
像这样反序列化:
var result = JsonConvert.DeserializeObject<Root>(objectString);
现在您可以很容易地访问评论:
var commentText = result.FeedComments[3465665].Text