簡體   English   中英

將JSON字符串轉換為對象C#

[英]Convert JSON string to object C#

我有JSON字符串結果,如下所示。 在此處輸入圖片說明

在此響應中,有時將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將自動解決此問題,但否則,您需要編寫自定義ContractResolverJsonConverter 在這里,您可以檢測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.

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