【问题标题】:Deserialize JSON to known and unknown types in a class将 JSON 反序列化为类中的已知和未知类型
【发布时间】:2014-12-10 22:23:51
【问题描述】:

我正在使用 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 相应的对象格式?

【问题讨论】:

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


【解决方案1】:

创建一个包装类来反序列化:

[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);

【讨论】:

    【解决方案2】:

    您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多