[英]Convert JSON string to object C#
在此響應中,有時將sizeKey和sizeName屬性作為字符串返回。 但是有時兩個屬性都在數組內返回,如下所示
我正在使用以下代碼將其轉換為對象
var assets = jObject["assets"].Children().ToList();
foreach (var item in assets)
{
decorationAssets.Add(item.ToObject<AEDecorationAssets>());
}
我的AEDecorationAssets類如下。
public class AEDecorationAssets
{
public string Id { get; set; }
public string Url { get; set; }
public string[] Colors { get; set; }
public string FontKey { get; set; }
public string SizeKey { get; set; }
public string ViewKey { get; set; }
public string FontName { get; set; }
public int Rotation { get; set; }
public string SizeName { get; set; }
public string TextValue { get; set; }
public string EntityType { get; set; }
public string LocationCode { get; set; }
public string LocationName { get; set; }
public string TextEffectKey { get; set; }
public string TextEffectName { get; set; }
public string DecorationMethod { get; set; }
public string NumDecorationColors { get; set; }
}
當“ sizeKey”是一個數組時,上面的代碼給出了一個錯誤。 我該如何解決這個問題? 我們可以使用任何JSON屬性來解決它嗎?
一種實現方法是,使您的SizeKey
類型成為一個object
(例如, public object SizeKey { get; set; }
),然后可以在item.ToObject<AEDecorationAssets>().SizeKey.GetType()
進行切換/大小寫操作item.ToObject<AEDecorationAssets>().SizeKey.GetType()
指出如何處理(例如,如果String
做到這一點,如果JArray
做到這一點),等等。
如果JSON類型有時是一個array
,有時是一個string
,則不能真正將其簡單地映射到.NET類型,因為沒有一種支持此行為。
因此,首先需要一個可以存儲此數據的數據類型,例如string[]
或List<string>
。
可能JsonConvert
將自動解決此問題,但否則,您需要編寫自定義ContractResolver
或JsonConverter
。 在這里,您可以檢測source屬性是字符串還是數組。 如果是array
,則可以使用默認的反序列化。 如果是string
,則需要將其轉換為具有單個值的數組。
只需獲取要為其創建c#對象的json結果,然后可以從https://jsonlint.com/驗證 json響應,然后就可以通過http:// json2csharp創建想要的任何類型的json響應的c#對象。 com 。 在獲取json響應的c#對象之后,您只需要將json響應反序列化為已創建的c#對象即可。 這將返回您的預期結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.