【发布时间】:2016-05-04 08:56:50
【问题描述】:
谁能告诉我为什么反序列化这个 JSON 响应时会出错?
public T PostData<T>(string command, Dictionary<string, object> postData)
{
postData.Add("command", command);
postData.Add("nonce", Helper.GetCurrentHttpPostNonce());
var jsonString = PostString(Helper.ApiUrlHttpsRelativeTrading, postData.ToHttpPostString());
var output = JsonSerializer.DeserializeObject<T>(jsonString);
return output;
}
[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)) {
/*
An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code
Additional information: Could not create an instance of type Jojatekok.PoloniexAPI.WalletTools.IBalance. Type is an interface or abstract class and cannot be instantiated. Path '1CR.available', line 1, position 20.
ERROR's ON NEXT LINE :
*/
return (T)serializer.Deserialize(jsonTextReader, typeof(T));
}
}
}
返回的字符串值为: {"1CR":"available":"0.00000000","onOrders":"0.00000000","btcValue":"0.00000000"}}
我有一个天平接口:
public interface IBalance
{
double QuoteAvailable { get; }
double QuoteOnOrders { get; }
double BitcoinValue { get; }
}
还有一个平衡模型:
public class Balance : IBalance
{
[JsonProperty("available")]
public double QuoteAvailable { get; private set; }
[JsonProperty("onOrders")]
public double QuoteOnOrders { get; private set; }
[JsonProperty("btcValue")]
public double BitcoinValue { get; private set; }
}
虽然它没有将 JSON 反序列化为 Balance 对象。我收到此错误:
(An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code
Additional information: Could not create an instance of type Jojatekok.PoloniexAPI.WalletTools.IBalance. Type is an interface or abstract class and cannot be instantiated. Path '1CR.available', line 1, position 20.)
此错误在发生的代码中注明。
有什么建议吗?
【问题讨论】:
-
我猜你打电话给
DeserializeObject<IBalance>,但它一定是DeserializeObject<Balance>。为什么你不使用JsonConvert? -
嗨,Maxim,您能说明如何在这种情况下使用 JsonConvert 吗?
标签: c# .net json serialization json-deserialization