Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的Json模式反序列化#_C#_Json_Serialization_Jsonserializer - Fatal编程技术网

C# C语言中的Json模式反序列化#

C# C语言中的Json模式反序列化#,c#,json,serialization,jsonserializer,C#,Json,Serialization,Jsonserializer,我正在尝试反序列化JSON,如下所示: {"METHOD":"GET_IVR_ACTION", "DATA": {"DID":"972732248673", "CALLER_ID":"972508822570", "CALLER_NAME":null, "IVR_UNIQUE_ID":"4c80c29146c61f3c24ed434e11cb340b", "DTMF":"",

我正在尝试反序列化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);
JavaScriptSerializer jsonSerializer=newJavaScriptSerializer();
数据数据=jsonSerializer.Deserialize(jsonString);

对象仍然空得令人失望……

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

您应该首先提取
数据
字符串,然后将其用作
反序列化
方法的参数

尝试使用以下工具进行测试:

        {
           "DID":"972732248673",
           "CALLER_ID":"972508822570",
           "CALLER_NAME":null,
           "IVR_UNIQUE_ID":"4c80c29146c61f3c24ed434e11cb340b",
           "DTMF":"",
           "MENU":"-1",
           "PREVIOUS_MENU":"-1"
        }
要获取
数据
部件,您有两个选项:

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

  • 使用正则表达式获取
    数据
    对象JSON


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

    您应该首先提取
    数据
    字符串,然后将其用作
    反序列化
    方法的参数

    尝试使用以下工具进行测试:

            {
               "DID":"972732248673",
               "CALLER_ID":"972508822570",
               "CALLER_NAME":null,
               "IVR_UNIQUE_ID":"4c80c29146c61f3c24ed434e11cb340b",
               "DTMF":"",
               "MENU":"-1",
               "PREVIOUS_MENU":"-1"
            }
    
    要获取
    数据
    部件,您有两个选项:

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

  • 使用正则表达式获取
    数据
    对象JSON


  • 这是我反序列化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;
        }
    
    publicstaticboolcreatejson(参考字典值,字符串源)
    {
    布尔结果=假;
    如果(!string.IsNullOrEmpty(源))
    {
    var serializer=新的JavaScriptSerializer();
    object json=serializer.DeserializeObject(源);
    values=json作为字典;
    结果=值!=null;
    }
    返回结果;
    }
    
    注意,它创建了一个字典并返回它。然后,您可以(在调试器中)浏览该结果并查看其中的值。然后,您可以找到从中提取所需值的正确方法。每次都对我有用


    这是我反序列化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;
        }
    
    publicstaticboolcreatejson(参考字典值,字符串源)
    {
    布尔结果=假;
    如果(!string.IsNullOrEmpty(源))
    {
    var serializer=新的JavaScriptSerializer();
    object json=serializer.DeserializeObject(源);
    values=json作为字典;
    结果=值!=null;
    }
    返回结果;
    }
    
    注意,它创建了一个字典并返回它。然后,您可以(在调试器中)浏览该结果并查看其中的值。然后,您可以找到从中提取所需值的正确方法。每次都对我有用


    请尝试..public string DID{get;set;}..在所有属性上请尝试..public string DID{get;set;}..在所有属性上是的,我知道问题是嵌套对象。。。我尝试了一个简单的JSON,就像你上面写的那样。。如何仅提取数据字符串??THANX!!另一种选择是将数据类嵌套在另一个类中;现在我正试图从对象中提取调用方ID。当我这样尝试时:dict[“DATA”][“CALLER_ID”]——我得到的结果是动态{string}类型。。如何将其转换为简单字符串?是的,我知道问题在于嵌套对象。。。我尝试了一个简单的JSON,就像你上面写的那样。。如何仅提取数据字符串??THANX!!另一种选择是将数据类嵌套在另一个类中;现在我正试图从对象中提取调用方ID。当我这样尝试时:dict[“DATA”][“CALLER_ID”]——我得到的结果是动态{string}类型。。如何将其转换为简单字符串??