将JSON反序列化为类中的已知和未知类型

时间:2014-12-10 22:23:51

标签: c# ajax asp.net-mvc json

我正在使用C#MVC并拥有以下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; }
}

我在客户端的POST期间使用本机序列化,但我只获取MessageType数据。

此外,代码:

var msgDataString = MessageData.ToString()

返回"System.Object"

如何相应地将MessageData作为对象格式?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);