【发布时间】:2022-11-01 22:55:37
【问题描述】:
我发现有人问过类似的问题,但无法从这些问题的答案中找到解决方案。
我有以下字符串:"{"message":"验证失败。发现 1 个错误。","errorCode":"E04300","developerHint":"检查验证错误并更正您的请求。","logId":"7612fd90f484abda-CPH","httpStatusCode":400,"errors":{ "customerNumber":{"errors":[{"propertyName":"customerNumber","errorMessage":"客户编号存在","errorCode":"E06010","inputValue":29926638,"developerHint":"客户编号29926638 已经存在"}]}},"logTime":"2022-10-28T12:29:27","errorCount":1}"
我将它反序列化为一个对象:
var obj = JsonConvert.DeserializeObject(json)
当我在 LinqPad 中调用 obj.Dump() 时,我得到了这个:
很明显,数据在我的对象中。只有我找不到它使用
obj.GetType().GetProperty("message").GetValue(obj, null)
任何想法如何获取此对象中的数据?
我努力了
obj.GetType().GetCustomAttributes();
obj.GetType().GetFields();
obj.GetType().GetMembers();
obj.GetType().GetProperties();
似乎找不到任何东西。
我知道显而易见的答案是只创建适合数据的类并反序列化到该类,但我特别想避免这种情况。
【问题讨论】:
-
这是一个
JObject- 没有message属性等。您尝试的反射调用只有在您有创建了一个适合数据的类。将JObject视为更复杂的Dictionary<string, JValue>。阅读链接文档和LINQ to JSON 文档了解更多详细信息。 -
谢谢。我还没有解决它,但是将它反序列化为 JObject 可以让我访问 Descendants() ,这看起来很有用。本周一将继续工作。
标签: c# json-deserialization system.reflection