我正在尝试反序列化看起来像这样的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);
对象仍然令人失望地空着......
答案 0 :(得分: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
部分,您有两种选择:
使用JavaScriptDeserializer
,但将结果分配给动态对象(非强类型)。在这种情况下,反序列化器使用其类型解析器来查找嵌套类型,并为您提供完整的对象图(对象层次结构)
使用正则表达式获取Data
对象JSON
答案 1 :(得分: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并返回它。然后,您可以(在调试器中)浏览该结果并查看其中的值。然后你可以找出从中获取所需值的正确方法。每次都适合我。
HTH!