从API解析嵌套的JSON响应时遇到麻烦。
API返回带有对象数组的数组。我面临的问题是数组中的对象之前每个数组中包含的int值(请参阅附加的示例JSON代码片段)。
我目前已经设置了反序列化的类型和对象,这似乎还不错,但是,当restsharp无法将INT值反序列化为我的反序列化类型时,就会出现问题。
杰森
[
[
1064,
{
"trx_id": "",
"block": 0,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "",
"op": [
"vote",
{
"voter": "user1",
"author": "user2",
"permlink": "UUID",
"weight": 0
}
]
}
]
]
请求
var response = await restClient.Execute<List<List<Models.Responses.AccountHistory.Transaction>>>(request);
Transaction.CS
public class Transaction
{
public string trx_id { get; set; }
public long block { get; set; }
public long trx_in_block { get; set; }
public long op_in_trx { get; set; }
public long virtual_op { get; set; }
//Etc..
}
我正在尝试反序列化嵌套的事务数组,int值对我没有任何实际用途。 我正在寻找一种忽略整数而仅解析对象的方法。
错误
未处理的异常:Newtonsoft.Json.JsonSerializationException:将值0转换为类型“ Models.Responses.AccountHistory.Transaction”时出错。路径'[0] [0]',第1行,位置3。
答案 0 :(得分:1)
您可以为RestSharp
客户编写自己的custom deserializer。
然后将其实例化时需要在客户端上进行设置。
答案 1 :(得分:0)
感谢您提供指向自定义反序列化器的指示,这很有帮助。下面的解决方案摘要:
[JsonConverter(typeof(HistoryDeserializer))]
public class AccountHistory
{
public long Integer { get; set; }
public Transaction transaction { get; set; }
}
自定义JsonConverter
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.StartObject:
var objectValue = serializer.Deserialize<Transaction>(reader);
return new AccountHistory { transaction = objectValue };
case JsonToken.Integer:
var integerValue = serializer.Deserialize<long>(reader);
return new AccountHistory { Integer = integerValue };
}
return null;
}