gpt4 book ai didi

c# - 具有可以是两种不同类型之一的属性的类

转载 作者:太空狗 更新时间:2023-10-29 23:38:02 25 4
gpt4 key购买 nike

我正在用 C# 开发 Telegram 机器人,但在实现 Message 类型时遇到困难。根据API documentation , chat 字段可以是 User 类型或 GroupChat 类型。我如何在 C# 中实现它?

到目前为止,我只能使用 Newtonsoft.Json 得出以下代码:

public class Update {
....
[JsonProperty("chat")]
public User chat { get; set; }

[JsonProperty("chat")]
public GroupChat group_chat { get; set; }
....
}

但它不适用于我的 WebAPI 2 Controller 方法,因为我使用 FromBody 属性反序列化 Message:

public async Task<HttpResponseMessage> Post(string token, [FromBody] Update update)

(Update 类型有一个 Message 类型的字段message)

有没有更好的方法来实现Message类型?

最佳答案

因为你应该在一个字段中处理看似两个完全不同的对象,我认为你不能使用强类型对象,但你可以为聊天字段使用动态类型,例如

public class Telegram
{
public int message_id { get; set; }
public dynamic chat { get; set; }
}

然后你可以访问变量并检查它们是否为空以了解它是用户还是群聊:

static void Main(string[] args)
{
string json = @"{ ""chat"": { ""id"": 1, ""first_name"": ""my_first_name"", ""last_name"": ""my_last_name"", ""username"": ""my_username"" }, ""message_id"": 123 }";
var telegram = Newtonsoft.Json.JsonConvert.DeserializeObject<Telegram>(json);
string name = telegram.chat.first_name; // name = my_first_name
string title = telegram.chat.title; // title = null
}

关于c# - 具有可以是两种不同类型之一的属性的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31828980/

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