C#对象 – 从对象内的JSON中获取属性

huangapple go评论92阅读模式
英文:

C# Object - get properties from json within the object

问题

我的HTTP响应数据包括一个结构化为Dictionary<string, object>的字段。在调试模式中访问该对象时,显示了我期望看到的内容,即:

ValueKind = Object:

  1. { "someProp" : "someValue",
  2. "anotherProp" : "anotherValue" .. }

=> 因此,该对象包含了我需要访问的大型JSON格式数据。然而,我无法弄清楚如何实现这一点。通常建议的方法返回null:

  1. var myValue = Odata.GetType().GetProperty("someProp").GetValue(Odata, null);

这让我认为应该进行一些序列化,但无论我尝试多少次,都找不到任何有效的方法。

以下是更多信息,如果不够,我会添加所需的内容。我将其分解成很多步骤,以尽量清晰地展示我每一步得到的内容:

  1. // 假设Odata = 字典中的对象值
  2. // 执行反射
  3. var type = Odata.GetType() // 这会得到System.Text.json.JsonElement
  4. // 在运行时获取类型属性
  5. var props = type.GetProperties()
  6. // 返回长度为2的数组:System.Text.Json.ValueKind和System.Text.Json.JsonElement
  7. // 尝试在JsonElement中访问我的属性
  8. var someValue= type.GetProperty("someProp").GetValue(Odata, null) // 这会返回null

我不一定需要一个确切的解决方案,但指导我阅读的正确位置也将非常有用!

英文:

My HTTP response data includes a field that is structured as a Dictionary<string,object>. Accessing the Object in debug mode shows me what I expect to see, i.e.

ValueKind = Object:

  1. { &quot;someProp&quot; : &quot;someValue&quot;,
  2. &quot;anotherProp&quot; : &quot;anotherValue&quot; .. }

=> the object therefore contains the large json formatted data that I need to access. However, I can't figure out how to do that .. The commonly suggested method returns null:

  1. var myValue = Odata.GetType().GetProperty(&quot;someProp&quot;).GetValue(Odata, null);

which makes me think there is something I should be serializing which I am not and regardless how much I tried, I can't find any methods to work.

Here is some more info, if it is not enough I will add whatever is needed. I broke it down a lot to try to show clearly what I am getting each step):

  1. // assume Odata = the Object value from the dictionary
  2. //perform reflection
  3. var type = Odata.GetType() // this gives System.Text.json.JsonElement
  4. //get type properties at runtime
  5. var props = type.GetProperties()
  6. //returns array of 2 :
  7. //System.Text.Json.ValueKind and System.Text.json.JsonElement
  8. //attempting to access my properties in the JsonElement
  9. var someValue= type.GetProperty(&quot;someProp&quot;).GetValue(Odata,null) //this gives null

I don't necessarily want an exact solution, but pointing me to the right place to read would also be very useful!

答案1

得分: 2

当你使用 GetType().GetProperty() 时,你正在使用 Type 类的 GetProperty() 方法,这涉及到反射。你应该使用 JsonElement 类的 GetProperty 方法代替:

  1. var myValue = Odata.GetProperty("someProp").GetString();
英文:

When you do GetType().GetProperty() you're using the GetProperty() method from Type class, you're using reflection. You want to use the GetProperty method of JsonElement class instead:

  1. var myValue = Odata.GetProperty(&quot;someProp&quot;).GetString();

huangapple
  • 本文由 发表于 2023年2月14日 20:58:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/75448179.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定