【发布时间】:2022-01-23 20:42:36
【问题描述】:
我正在使用 this library (FireSharp) 访问 Firebase。我检索了一个 json 作为 FirebaseResponse 的主体(基本上是状态和主体),效果很好,看起来像这样(所有测试数据):
"{\"Cobros\":{\"1001\":{\"Estado\":\"Cobrado\",\"Repartidor\":124},\"1112\":{\"Estado\":\"Pendiente\",\"Repartidor\":124}},\"Pedidos\":{\"1111\":{\"Estado\":\"Entregado\",\"Repartidor\":123}},\"Repartidores\":{\"123\":{\"ID Android\":\"asdadada\",\"Terminal\":123},\"124\":{\"ID Android\":\"dggrefawe\",\"Terminal\":124}}}"
Firebase 结构看起来 like this,其后面带有一些参数。 我需要反序列化 Json 以将其嵌入到具有多个列表参数的对象中,一个用于 18500 后面的每个节点。我已经检查了this question,这是我到目前为止的代码:
public class cargaFirebase
{
[JsonProperty("Cobros")]
public List<documentoFirebase> carfb_cobros { get; set; }
[JsonProperty("Pedidos")]
public List<documentoFirebase> carfb_pedidos { get; set; }
[JsonProperty("Repartidores")]
public List<repartidorFirebase> carfb_repartidores { get; set; }
}
然后反序列化尝试...
FirebaseResponse resp = fbClient.Get(request);
cargaFirebase carga_res = JsonConvert.DeserializeObject<cargaFirebase>(resp.Body);
这给了我一个我无法理解的反序列化错误,没有真正进入 jsons 抱歉,谢谢!
{Newtonsoft.Json.JsonSerializationException: 无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[Reparto_Android.Code.Helpers.FirebaseHelper+documentoFirebase ]' 因为 该类型需要一个 JSON 数组(例如 [1,2,3])才能正确反序列化。 要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径
【问题讨论】:
-
这些属性中没有一个是正确的。您没有 Cobros、Pedidos 或 Repartidores 的列表,它们都是单个对象 - 正如异常消息告诉您的那样:“要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为可以从 JSON 反序列化的普通 .NET 类型(例如,不是整数之类的原始类型,不是数组或列表之类的集合类型)对象。”