获取名称以数字开头的对象的属性的值

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