C# 将JSON字符串反序列化为类
我有一个非常简单的DataContract类,需要反序列化到其中。我使用JSON.NET不是出于特定原因,所以请使用DataContractJsonSerializer 我的合同课是这样的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(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来实现这一点,因为它可以让我过上简单的生活,但我有一个特殊的需要——谢谢你的回答:)