簡體   English   中英

使用JsonConvert.DeserializeObject(Json.net)反序列化-按動態類型

[英]Deserialize using JsonConvert.DeserializeObject (Json.net) - by dynamic type

我有以下問題。 我有一個枚舉,它定義所有(對象)都從基類繼承的可能對象的類型。 現在,我知道要創建的對象的類型。

但是,我想防止代碼重復。 因此,為了做到這一點,我想做以下事情:

Type myType = null;
string myParemeters = "json valid value" // the value to deserialize from
switch (enumType)
{
    case EnumType.X:
        myType = typeof(X);                    
        break;
    case EnumType.Y:
        myType = typeof(Y);                    
        break;
}
if (myType != null)
{
    myRequest = JsonConvert.DeserializeObject<myType>(myParameters);
}

而myRequest是一個對象,可以是X,Y或Enum中列出的任何其他值(因為它們都繼承自基類)。

但是,由於出現以下錯誤,因此無法編譯:

找不到類型或名稱空間名稱“ myType”(您是否缺少using指令或程序集引用?)

我現在的解決方案是在每種情況下都創建實例。.但是我真的不想這樣做。

有人知道如何解決這個問題嗎?

嘗試這個

JsonConvert.DeserializeObject(“ somejson”,myType);

要了解為什么無法以這種方式將類型作為通用參數傳遞,請參見以下鏈接:

C銳利使用系統類型作為通用參數

我使用以下代碼對其進行了測試:

    class TypeA : BaseClass {}

    class TypeB : BaseClass {}

    class BaseClass
    {
        public string Name { get; set; }
    }

    public enum Test
    {
        A = 0,
        B
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        const Test enumType = Test.A;
        Type myType = null;

        switch (enumType)
        {
            case Test.A:
                myType = typeof(TypeA);                    
                break;
            case Test.B:
                myType = typeof(TypeB);                    
                break;
        }

        var result = JsonConvert.DeserializeObject("{ 'Name': 'test' }", myType);
  • 抱歉,我誤讀了您的原始問題。 復制了您的代碼並實現了您的問題。

暫無
暫無

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

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