You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function中C#反序列化JSON到IDiscordInteraction接口报错解决

解决接口反序列化实例化错误问题

错误原因

你遇到的问题是Json.NET无法直接实例化接口类型,IDiscordInteraction属于抽象接口,运行时无法创建其对象实例,因此反序列化时抛出异常。

解决方案

要解决这个问题,你需要使用IDiscordInteraction对应的具体实现类来完成反序列化,以下是两种可行方式:

方式1:使用Discord.NET库自带的具体实现类

Discord.NET库通常会为接口提供官方的具体实现类(比如DiscordInteraction,可通过IDE智能提示或库文档确认准确类名)。修改反序列化代码如下:

// 替换接口类型为具体实现类
DiscordInteraction? data = JsonConvert.DeserializeObject<DiscordInteraction>(requestBody, new JsonSerializerSettings() { ContractResolver = contractResolver });

方式2:自定义实现类

如果库中没有现成的具体类,你可以自行创建一个实现IDiscordInteraction的实体类,确保所有属性与接口定义一致:

// 自定义实现类,匹配接口的所有属性
public class DiscordInteraction : IDiscordInteraction
{
    // 示例属性,请根据实际接口定义补充完整
    public ulong? AppPermissions { get; set; }
    public string Token { get; set; }
    public int Type { get; set; }
    // 其他接口属性...
}

之后使用该自定义类完成反序列化,代码同方式1。

修改后的完整代码片段

[Function("InteractionHandler")]
public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestData req)
{
    _logger.LogInformation("InteractionHandler");

    DefaultContractResolver contractResolver = new DefaultContractResolver
    {
        NamingStrategy = new CamelCaseNamingStrategy()
    };

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    _logger.LogInformation(requestBody);

    // 使用具体类反序列化
    DiscordInteraction? data = JsonConvert.DeserializeObject<DiscordInteraction>(requestBody, new JsonSerializerSettings() { ContractResolver = contractResolver });

    // 后续业务代码...
}

内容的提问来源于stack exchange,提问作者Jasper B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:22:14