C# JSON 反序列化:类型是接口或抽象类,无法实例化

2024-05-08

我正在使用这个 C# 项目,它使用用于与在线交易平台 Poloniex 进行通信的 API https://github.com/Jojatekok/PoloniexApi.Net.

此代码应该获取钱包中的余额:

var x = await polo_client.Wallet.GetBalancesAsync();

虽然这段代码给出了这个错误:

获取钱包时出错:无法创建 Jojatekok.PoloniexAPI.WalletTools.IBalance 类型的实例。
类型是接口或抽象类,无法实例化。
路径“1CR.available”,第 1 行,位置 20。

在 Helper.cs 中:

[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
internal static T DeserializeObject<T>(this JsonSerializer serializer, string value)
{ 
    using (var stringReader = new StringReader(value))
    {
        using (var jsonTextReader = new JsonTextReader(stringReader))
        {
            return (T)serializer.Deserialize(jsonTextReader, typeof(T));
        }
    } 
}

调用它的代码是:

public T GetData<T>(string command, params object[] parameters)
{
    var relativeUrl = CreateRelativeUrl(command, parameters);
    var jsonString = QueryString(relativeUrl);
    var output = JsonSerializer.DeserializeObject<T>(jsonString);
    return output;
}

有人可以告诉我为什么反序列化此 JSON 响应时出现错误吗?

响应是 JSON,下面是它的示例:

{
"1CR":{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"},
"ABY":{"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}
}

无论是否为 JSON,错误都是自描述的。您无法实例化接口或抽象类。它们只是它们所代表的功能或对象结构的蓝图。

例如,您不能这样做:

var something = new ISomething();

但是,你可以这样做:

ISomething something = new Something();

您所需要的只是该接口的一些具体实现。就像是:

public JsonReceived : IBalance
{
// rest of the implementation
}

或者第三方可能已经提供了,请检查他们的 SDK 文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# JSON 反序列化:类型是接口或抽象类,无法实例化 的相关文章

随机推荐