来自API的JSON响应:
public class LabelResult
{
public long order_id { get; set; }
public string order_number { get; set; }
public string carrier_name { get; set; }
public Array tracking_numbers { get; set; }
public byte[] labels { get; set; }
//public Array label_types { get; set; }
public bool success { get; set; }
}
我有这个类来转换数据:
httpresponse
这是转换private LabelResult ConvertLabelResponse(HttpResponseMessage response)
{
var label_response = new LabelResult();
if (response.IsSuccessStatusCode)
{
var jsonString = response.Content.ReadAsStringAsync();
jsonString.Wait();
if (jsonString.IsCompleted)
{
try
{
var data = JObject.Parse(jsonString.Result);
return JsonConvert.DeserializeObject<LabelResult>(data.ToString());
}
catch (Exception ex)
{
return label_response;
}
}
return null;
}
else
{
return null;
}
}
:
Header set Access-Control-Allow-Origin "https://www.meetotakus.net"
我有这些错误:
读取字节时出现意外的标记:字符串。路径&#39;标签[0]&#39;,第18行,位置10482。
- 醇>
无法创建System.Array类型的实例。 Type是接口或抽象类,无法实例化。路径 &#39; tracking_numbers&#39;,第5行,第23位。
如何修复这些错误?
答案 0 :(得分:3)
你的根模型应该是:
public class LabelResult
{
public long order_id { get; set; }
public string order_number { get; set; }
public string carrier_name { get; set; }
public List<string> tracking_numbers { get; set; }
public List<byte []> labels { get; set; }
public List<string> label_types { get; set; }
public bool success { get; set; }
}
注意:
如其serialization guide所示,Json.NET会将Base64编码的字符串映射到byte []
。您的"labels"
属性是此类字符串的数组,因此应绑定到byte [][]
或List<byte []>
。
没有理由解析为JObject
然后转换回字符串以反序列化:
var data = JObject.Parse(jsonString.Result);
return JsonConvert.DeserializeObject<LabelResult>(data.ToString());
而是从结果中反序列化:
return JsonConvert.DeserializeObject<LabelResult>(jsonString.Result);
始终倾向于使用List<string>
等类型集合来对ArrayList
或Array
等无类型集合进行无类型处理。此外,System.Array
是抽象基类型,因此无法直接实例化。
如果您愿意,可以使用数组而不是列表:
public string [] tracking_numbers { get; set; }
public byte [][] labels { get; set; }
public string [] label_types { get; set; }
我发现可调整大小的集合更方便,所以更喜欢List<T>
。
示例工作.Net fiddle。
答案 1 :(得分:1)
我认为问题是您正在使用Array关键字初始化数组。这可能是错的。 tracking_numbers 可能是字符串数组。 其次,当你读取Json数据时,你必须手动转换你的标签也是不匹配的数组
"Label": ["..."]
如果你想阅读,你必须在初始化时手动或2D阵列。
public byte[][] labels { get; set; }