2014-12-10 96 views
0

I'm C#MVC並具有以下JSON:反序列化JSON已知和未知的使用類型中的一類

MessageType: "Type1" 

MessageData: {{Name: "Jonas"}, Phones: [{ Fixed: "12345", Mobile: "45678" }], Addresses: [{ Home: "ababa"} ... ], { HasId: "Yes }, ... } 

MessageData將根據MessageType包含不同的數據。

我需要的是把它反序列化爲下面的C#結構:採用

public class AjaxMsg 
{ 
    public string MessageType { get; set; } 
    public object MesssageData { get; set; } 
} 

我可是本機序列的職位從客戶端中,但我只得到了MessageType數據。

此外,代碼:

var msgDataString = MessageData.ToString() 

回報"System.Object"

我怎樣才能獲得相應MessageData作爲對象的格式?

+1

https://stackoverflow.com/questions/19307752/deserializing-的可能的複製多態的JSON類沒有類型的信息使用JSON網或http://stackoverflow.com/questions/5186973/json-serialization-of-array-with-polymorphic-objects。 – dbc 2014-12-11 00:45:18

回答

0

創建一個包裝類反序列化:

[Serializable] 
public class AjaxMsg 
{ 
    [DataMember] 
    public string MessageType { get; set; } 

    [DataMember] 
    public object MessageData { get; set; } 
} 

public class Data 
{ 
    public IList< AjaxMsg> list {get;set;} 
} 

var obj = JsonConvert<Data>(json); 
0

您可以使用JSON.NET的ToObject方法:

JObject Data = Message.MessageData; 
Type type = Message.MessageType; 
object obj = Data.ToObject(type); // if you dont know the type in compile time 

MyType obj2 = Data.ToObject<MyType>(); // if you know the type in compile time