簡體   English   中英

如何將此JSON字符串反序列化回列表 <T> ?

[英]How do I deserialize this JSON string back to a List<T>?

我希望能夠使用JSON serializedeserialize serialize List<T> ,其中類型是interface

我的代碼可以將List<T> serialize字符串,但是不確定如何將JSON字符串deserialize化為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
});

這是我必須deserializeJSON字符串的代碼:

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

這是我得到的錯誤:

Newtonsoft.Json.dll中發生類型為'Newtonsoft.Json.JsonSerializationException'的異常,但未在用戶代碼中處理

附加信息:無法將當前JSON數組(例如[1,2,3])反序列化為類型'CanFindLocation.Interfaces.Android._1_1.IAndroidAsset1_1',因為該類型需要JSON對象(例如{“ name”:“ value”} )正確反序列化。

要解決此錯誤,可以將JSON更改為JSON對象(例如{“ name”:“ value”}),也可以將反序列化類型更改為數組,或者將實現集合接口的類型(例如ICollection,IList)更改為List,例如List從JSON數組反序列化。 還可以將JsonArrayAttribute添加到類型中,以強制其從JSON數組反序列化。

路徑'',第1行,位置1。

我可以幫忙將JSON字符串deserialize List<T>嗎?

提前致謝。

您要對列表進行序列化,而不是對單個IAndroidAsset1_1對象進行序列化,因此需要反序列化為List<IAndroidAsset1_1>類型而不是IAndroidAsset1_1

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM