如何将这个JSON字符串反序列化回List< >

本文关键字:反序列化 List 字符串 JSON | 更新日期: 2023-09-27 17:50:22

我希望能够使用JSONserializedeserializeList<T>,其中类型是interface

我的代码工作到serializeList<T>到一个字符串,但我不确定如何deserializeJSON字符串回到List<T>

这是我的代码serialize List<T>:

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.

我可以有一些帮助deserializeJSON字符串回到List<T>

如何将这个JSON字符串反序列化回List< >

您正在序列化一个列表而不是单个IAndroidAsset1_1对象,因此您需要反序列化为List<IAndroidAsset1_1>类型而不是IAndroidAsset1_1:

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