2017-03-16 102 views
-1

如何使用NewtonSoft JSON反序列化爲此類型的對象?該結構包含屬性類型變量,但基於此結構使用NewtonSoft時,此屬性將是另一個類。如何使用NewtonSoft Json反序列化具有變量類型屬性的類?

下面的代碼示例:

public class RootProduct 
{ 
    public Package Package {get; set;} 
} 

public class Package 
{ 
    //Package has a property in which the class type should be changed in order to deserialize 
    public Package_id ThisValueIsVariable {get; set;} 
} 

public class Package_id 
{ 
    public string product_name {get; set;} 
} 

在這個包中,有必要發送的package_id,當接收到如在下面的結構中,場「的package_id」該查詢返回的數據查詢(作爲回報JSON)是在查詢中發送的這段代碼。

返回的JSON:

"Package": { 
    "Package_id": { //This is the value that changes according to the value passed in the query to JSON 
     "package_name": "my product name" 
    } 
} 

"Package": { 
    "SecondPackage_id": { //This is the value that changes according to the value passed in the query to JSON 
     "package_name": "my product name" 
    } 
} 

"Package": { 
     "ThirdPackage_id": { //This is the value that changes according to the value passed in the query to JSON 
      "package_name": "my product name" 
     } 
} 

UPDATE:

在上面的代碼只有第一產品將被反序列化,因爲只有一個類具有名稱「的package_id」,並且第二而第三個JSON項目不會反序列化使用JsonConvert.Deserialize,因爲SecondPackage_id類不存在連續。

+0

獲得(多個)命名的對象,您可以修改您的代碼示例,以顯示你的意思是什麼「包在其中的類類型應更改的屬性」 – Waaghals

+0

@Waaghals此消息意味着返回的JSON中的字段「package_id」不是固定的名稱,即字段類型不是固定字段,但所有變體都包含相同的屬性。該名稱是一個包ID,JSON標籤是一個包的ID,如果我通過列表查詢,該ID帶有另一個「名稱」,但它是同一個類。我需要找到一種能夠使這種動態變化的方法,以便Newtonsoft理解反序列化的內容。 –

回答

1

解決方案取決於您是否知道運行時的名稱。

當你知道你在動手之前可以在包裝類中創建爲每種類型的一個單獨的屬性如下可能的名字:

public class Package 
{ 
    public Package_id FirstPackage {get; set;} 
    public Package_id SecondPackage {get; set;} 
    public Package_id ThridPackage {get; set;} 
} 

其它性能應重新序列化空。

當您在運行時不知道可能的ID時,您實際上正在接收 鍵值對。因爲他們的關鍵是每個對象不同,技術上可能是多個(即使在你的情況下,它可能只有一個)。使用字典來從JSON

public class RootProduct 
{ 
    //No package class needed 
    public IDictionary<string, Package_id> Package {get; set;} 
} 

public class Package_id 
{ 
    public string product_name {get; set;} 
} 
+0

我不知道預期值是什麼......它們是隨機的 –

+0

完美!謝謝! –

相關問題