如何将这个JSON字符串反序列化回List< >
本文关键字:反序列化 List 字符串 JSON | 更新日期: 2023-09-27 17:50:22
我希望能够使用JSON
到serialize
和deserialize
到List<T>
,其中类型是interface
。
我的代码工作到serialize
的List<T>
到一个字符串,但我不确定如何deserialize
的JSON
字符串回到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.
我可以有一些帮助deserialize
的JSON
字符串回到List<T>
您正在序列化一个列表而不是单个IAndroidAsset1_1
对象,因此您需要反序列化为List<IAndroidAsset1_1>
类型而不是IAndroidAsset1_1
:
var deserializedObject = JsonConvert.DeserializeObject<List<IAndroidAsset1_1>>(serializedJson, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
});