1

我正在尝试反序列化如下所示的 JSON:

{"METHOD":"GET_IVR_ACTION",
 "DATA":   {"DID":"972732248673",
            "CALLER_ID":"972508822570",
            "CALLER_NAME":null,
            "IVR_UNIQUE_ID":"4c80c29146c61f3c24ed434e11cb340b",
            "DTMF":"",
            "MENU":"-1",
            "PREVIOUS_MENU":"-1"}
}

进入这个类对象:

public class DATA
{
    public string DID = string.Empty;
    public string CALLER_ID = string.Empty;
    public string CALLER_NAME = string.Empty;
    public string IVR_UNIQUE_ID = string.Empty;
    public string DTMF = string.Empty;
    public string MENU = string.Empty;
    public string PREVIOUS_MENU = string.Empty;
}

使用 JavaScriptSerializer:

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
DATA data = jsonSerializer.Deserialize<DATA>(jsonString);

该对象仍然是令人失望的空...

4

2 回答 2

1

好吧,JSON 字符串有一个嵌套对象。JavaScriptSerializer或者本质上任何其他 JSON 序列化工具都使用反射来一一映射属性和属性。

您应该首先提取Data字符串,然后将其用作Deserialize方法的参数。

尝试测试:

        {
           "DID":"972732248673",
           "CALLER_ID":"972508822570",
           "CALLER_NAME":null,
           "IVR_UNIQUE_ID":"4c80c29146c61f3c24ed434e11cb340b",
           "DTMF":"",
           "MENU":"-1",
           "PREVIOUS_MENU":"-1"
        }

要获得Data零件,您有两种选择:

  1. 使用JavaScriptDeserializer,但将结果分配给动态对象(非强类型)。在这种情况下,反序列化器使用其类型解析器来查找嵌套类型,并为您提供完整的对象图(对象层次结构)

  2. 使用正则表达式获取Data对象 JSON

于 2013-11-13T16:22:45.407 回答
0

这是我反序列化 JSON 的方法:

    public static bool CreateJson(ref Dictionary<string, object> values, string source)
    {
        bool result = false;
        if (!string.IsNullOrEmpty(source))
        {
            var serializer = new JavaScriptSerializer();
            object json = serializer.DeserializeObject(source);
            values = json as Dictionary<string, object>;
            result = values != null;
        }

        return result;
    }

请注意,它创建了一个 Dictionary 并返回它。然后,您可以(在调试器中)浏览该结果并查看其中的值。然后你可以找出正确的方法来从中提取你想要的值。每次都为我工作。

于 2013-11-13T16:23:38.860 回答