【发布时间】:2015-05-21 07:43:00
【问题描述】:
我希望能够使用JSON 到serialize 和deserialize 和List<T>,其中类型是interface。
我的代码可以将serialize List<T> 转换为字符串,但不确定如何将deserialize JSON 字符串转换回List<T>。
这是我给serializeList<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 行,位置 1。
我可以帮我把deserialize 的JSON 字符串转回List<T>
提前致谢。
【问题讨论】:
标签: c# json list serialization interface