如何将此JSON字符串反序列化回List <t>?

时间:2015-05-21 07:43:01

标签: c# json list serialization interface

我希望能够JSON使用serializedeserialize使用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>

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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