【问题标题】:How do I deserialize this JSON string back to a List<T>?如何将此 JSON 字符串反序列化回 List<T>?
【发布时间】:2015-05-21 07:43:00
【问题描述】:

我希望能够使用JSONserializedeserializeList&lt;T&gt;,其中类型是interface

我的代码可以将serialize List&lt;T&gt; 转换为字符串,但不确定如何将deserialize JSON 字符串转换回List&lt;T&gt;

这是我给serializeList&lt;T&gt;的代码:

List<IAndroidAsset1_1> androidAssets = new List<IAndroidAsset1_1>();

AndroidMapMarkerIconAsset1_1 androidMapMarkerIconAsset1_1 = new AndroidMapMarkerIconAsset1_1();
androidMapMarkerIconAsset1_1.Id = 1;
androidMapMarkerIconAsset1_1.icon = "TestIcon";
androidAssets.Add(androidMapMarkerIconAsset1_1);

AndroidMapMarkerSimpleImageAsset1_1 androidMapMarkerSimpleImageAsset1_1 = new AndroidMapMarkerSimpleImageAsset1_1();
androidMapMarkerSimpleImageAsset1_1.Id = 2;
androidMapMarkerSimpleImageAsset1_1.expiryDate = DateTime.UtcNow;
androidMapMarkerSimpleImageAsset1_1.webAddress = "http://www.test.com";
androidAssets.Add(androidMapMarkerSimpleImageAsset1_1);

string serializedJson = JsonConvert.SerializeObject(androidAssets, Formatting.Indented, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.Objects,
    TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
});

这是我必须 deserialize JSON 字符串的代码:

var deserializedObject = JsonConvert.DeserializeObject<IAndroidAsset1_1>(serializedJson, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.Objects
});

这是我得到的错误:

“Newtonsoft.Json.JsonSerializationException”类型的异常 发生在 Newtonsoft.Json.dll 中但未在用户代码中处理

附加信息:无法反序列化当前 JSON 数组 (例如 [1,2,3])输入类型 'CanFindLocation.Interfaces.Android._1_1.IAndroidAsset1_1' 因为 type 需要一个 JSON 对象(例如 {"name":"value"})来反序列化 正确。

要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"}) 或将反序列化类型更改为数组或 实现集合接口的类型(例如 ICollection、IList) 比如可以从 JSON 数组反序列化的 List。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。

路径'',第 1 行,位置 1。

我可以帮我把deserializeJSON 字符串转回List&lt;T&gt;

提前致谢。

【问题讨论】:

    标签: c# json list serialization interface


    【解决方案1】:

    您正在序列化列表而不是单个 IAndroidAsset1_1 对象,因此您需要反序列化为 List&lt;IAndroidAsset1_1&gt; 类型而不是 IAndroidAsset1_1

    var deserializedObject = JsonConvert.DeserializeObject<List<IAndroidAsset1_1>>(serializedJson, new JsonSerializerSettings
    {
         TypeNameHandling = TypeNameHandling.Objects
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多