[英]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);
要了解為什么無法以這種方式將類型作為通用參數傳遞,請參見以下鏈接:
我使用以下代碼對其進行了測試:
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.