Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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# 将JSON字符串反序列化为类_C#_Json_C# 4.0 - Fatal编程技术网

C# 将JSON字符串反序列化为类

C# 将JSON字符串反序列化为类,c#,json,c#-4.0,C#,Json,C# 4.0,我有一个非常简单的DataContract类,需要反序列化到其中。我使用JSON.NET不是出于特定原因,所以请使用DataContractJsonSerializer 我的合同课是这样的 [DataContract(Name = "d")] public class ResponseClass { [DataMember] public int ResponseCode { get; set;} [DataMemb

我有一个非常简单的DataContract类,需要反序列化到其中。我使用JSON.NET不是出于特定原因,所以请使用DataContractJsonSerializer

我的合同课是这样的

[DataContract(Name = "d")]
    public class ResponseClass
    {
        [DataMember]
        public int ResponseCode
        { get; set;}
        [DataMember]
        public string ResponseMessage
        { get; set;}
        [DataMember]
        public string Response
        { get; set;}
    }
    private string deserializeJSON(string resp, bool code = false)
    {
        string value = string.Empty;
        ResponseClass deserialized = null;
        using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(resp)))
        {
            stream.Position = 0;
            var ser = new DataContractJsonSerializer(typeof(ResponseClass));
            deserialized = ser.ReadObject(stream) as ResponseClass;
        }
        value = code ? deserialized.Response : deserialized.ResponseCode.ToString();
        return value;
    }
服务调用将返回一个有效的Json字符串,但在反序列化过程中,末尾的值始终为0或string.Empty,尽管传入的值为非0或非string.Empty

我的反序列化代码如下所示

[DataContract(Name = "d")]
    public class ResponseClass
    {
        [DataMember]
        public int ResponseCode
        { get; set;}
        [DataMember]
        public string ResponseMessage
        { get; set;}
        [DataMember]
        public string Response
        { get; set;}
    }
    private string deserializeJSON(string resp, bool code = false)
    {
        string value = string.Empty;
        ResponseClass deserialized = null;
        using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(resp)))
        {
            stream.Position = 0;
            var ser = new DataContractJsonSerializer(typeof(ResponseClass));
            deserialized = ser.ReadObject(stream) as ResponseClass;
        }
        value = code ? deserialized.Response : deserialized.ResponseCode.ToString();
        return value;
    }
我四处寻找答案,但什么都没有出现

数据返回看起来是这样的(这就是为什么合同返回被称为“d”-不确定这是否有区别,但结果仍然相同,RespCode为0,RespMess,Resp=string.Empty)

由于您的C#class属性(例如
ResponseCode
)和JSON名称(例如
RespCode
)不匹配,您需要在
DataMember
属性中指定这些
Name
s。带有
d
的结构可以用另一个类来表示(我为它制作了
ResponseClassContainer
),而不是简单地命名
DataContract
d。这项工作:

private string deserializeJSON(string resp, bool code = false)
{
    string value = string.Empty;
    ResponseClass deserialized = null;
    using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(resp)))
    {
        stream.Position = 0;
        var ser = new DataContractJsonSerializer(typeof(ResponseClassContainer));
        deserialized = (ser.ReadObject(stream) as ResponseClassContainer).d;
    }
    value = code ? deserialized.Response : deserialized.ResponseCode.ToString();
    return value;
}
[DataContract]
public class ResponseClassContainer
{
    [DataMember]
    public ResponseClass d { get; set; }
}
[DataContract]
public class ResponseClass
{
    [DataMember(Name="RespCode")]
    public int ResponseCode
    { get; set;}
    [DataMember(Name="RespMess")]
    public string ResponseMessage
    { get; set;}
    [DataMember(Name="Resp")]
    public string Response
    { get; set;}
}

存在
0
整数和
null
字符串,因为它们是各自类型的默认值。由于字符串中没有任何可识别的数据,因此这些都是设置在那里的数据。

很抱歉,您的答案没有详细信息,我无法完全理解您的问题。“末尾的值”总是零或字符串。空是什么意思?您是指最后一个数据成员“Response”属性吗?“尽管传入了值”,您的意思是将值传入您的
私有字符串反序列化JSON(string resp,bool code=false)
方法吗?我明白了-谢谢您的解释。正如我所说,通常情况下,我会使用JSON.NET来实现这一点,因为它可以让我过上简单的生活,但我有一个特殊的需要——谢谢你的回答:)