c# – JSON反序列化后无法访问属性到动态
发布时间:2020-12-16 00:11:18 所属栏目:百科 来源:网络整理
导读:我在 JSON反序列化后访问动态属性时遇到了一些问题.这是JSON: { "user" : { "511221" :{ "timestamp" : 1403365646384,"version" : -81317051,"email" : "user@name.com","name" : "My Name","structures" : [ "structure.62dd1ff1-f96b-22e3-8d4e-22000c20
我在
JSON反序列化后访问动态属性时遇到了一些问题.这是JSON:
{ "user" : { "511221" :{ "timestamp" : 1403365646384,"version" : -81317051,"email" : "user@name.com","name" : "My Name","structures" : [ "structure.62dd1ff1-f96b-22e3-8d4e-22000c20725r" ] } },} 这里实际上有两个问题.首先是每个用户的“511221”更改.这是在验证时给出的.我无法创建用户类,然后创建另一个名称不断变化的类. 而且,这是一个数字. AFAIK,没有办法将类名作为数字.我有什么选择?我无法控制API返回的内容. 因此,我没有反序列化到预定义的类中,而是具有动态,如下所示: dynamic jsonObject = JsonConvert.DeserializeObject(response); 我希望能够这样做: string[] structures = jsonObject.user.(authInfo.userid).structures; 换句话说,我希望(authInfo.userid)将用户ID作为上面的字符串输入,但这似乎不可能.我也试过反思: private static object ReflectOnPath(object o,string path) { object value = o; string[] pathComponents = path.Split('.'); foreach (var component in pathComponents) { Type type = value.GetType(); System.Reflection.PropertyInfo pi = type.GetProperty(component); //pi is null here,I have no idea why value = pi.GetValue(value); } return value; } 所以它可以这样调用,如上所示: string[] structures = ReflectOnPath(jsonObject,"user." + authInfo.userid + ".structures") as string[]; 但是,当调用它时,类型(JObject)上的GetProperty()为null.我知道属性“user”存在,但为什么我不能访问它? 解决方法
您可以将JSON反序列化为JObject而不是动态,然后您可以动态地按属性名称访问该属性,例如:
JObject jObject = JsonConvert.DeserializeObject<JObject>(response); var user = "511221"; var structures = jObject["user"][user]["structures"][0]; //given JSON input as in this question,//following line will print "structure.62dd1ff1-f96b-22e3-8d4e-22000c20725r" Console.WriteLine(structures); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |