我希望能够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”})或将反序列化类型更改为数组或a 实现集合接口的类型(例如ICollection,IList) 像可以从JSON数组反序列化的List。 JsonArrayAttribute也可以添加到类型中以强制它 从JSON数组反序列化。
路径'',第1行,第1位。
我可以帮助deserialize
JSON
字符串返回List<T>
提前致谢。
答案 0 :(得分:0)
您正在搜索列表而不是单个IAndroidAsset1_1
对象,因此您需要反序列化为List<IAndroidAsset1_1>
类型而不是IAndroidAsset1_1
:
var deserializedObject = JsonConvert.DeserializeObject<List<IAndroidAsset1_1>>(serializedJson, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
});