gpt4 book ai didi

c# - 我可以在 C# 中访问对象的字段吗

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:27 26 4
gpt4 key购买 nike

我正在使用 Newtonsoft.Json.JsonConvert.DeserializeObject(string str) 将字符串转换为 .Net 对象。这个字符串的真实类型可以是多个,没有其他信息表明这个字符串的类型。但我可以确认字符串消息是一个普通类的派生类对象,如Message,而Message中的字段可以告诉真实类型,Message 有一个类似int 类型 的字段。字符串是 MessageAMessageB 或任何具有不同 type 的字符串。

如果我将它转换成一个对象,我可以在 visual studio 调试器中看到这个对象具有 Json 字符串中描述的字段。但我无法访问这些字段。并将此对象转换为 Message 将因转换错误而失败。

我现在所做的是先将字符串翻译成Message 并查看类型,然后再进行翻译。这不是首选。那么我可以将它翻译成我可以读取所有数据的东西吗?另一种选择是字典,但我有一些数字字段。还有其他建议吗?

最佳答案

JsonConvert.DeserializeObject(string str) , 当用于 JSON 对象时,返回 JObject .您可以直接使用它(例如使用 DeserializeObject<JObject> 明确键入它),或作为 dynamic , 以访问其属性,例如

var data = @"{""type"": 1, ""otherProperty"": ""Hello!""}";
dynamic obj = JsonConvert.DeserializeObject(data);
if (obj.type == 1)
{
Console.WriteLine(obj.otherProperty); // prints Hello!
}

此外,您提到数字字段是使用字典的问题,但如果您将其设为 Dictionary<string, dynamic>您可能会发现使用它更容易:

var data = @"{""type"": 2, ""otherProperty"": 5}";
var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(data);
if (dict["type"] == 2)
{
int i = (int)dict["otherProperty"]; // type is long, so cast is required if you want an int
Console.WriteLine(i); // prints 5
}

关于c# - 我可以在 C# 中访问对象的字段吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com