反序列化 Json 对象空值
本文关键字:空值 对象 Json 反序列化 | 更新日期: 2023-09-27 18:35:12
我在将 JSON 对象反序列化为我的对象时遇到了一些问题,我正在为确定的属性获取一些可为空的值。
问题:完整对象可为空
在这种情况下,我正在获取所有对象属性空值。
Json 示例:
{
"message":{
"ts": "11/10/13 15:07:16",
"content": "vivo-2482573605"
}
}
发出请求并返回反序列化对象的代码:
public T Request<T>(IEndPoint jsonObject)
{
string endPoint = jsonObject.ToURL();
string requestType = jsonObject.RequestType;
string jsonData = jsonObject.Json;
HttpWebRequest request = initRequest(URL + endPoint, requestType);
if (!string.IsNullOrWhiteSpace(jsonData)){
using (var writeStream = new StreamWriter(request.GetRequestStream()))
{
writeStream.Write(jsonData);
}
}
try{
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string jsonResponse = streamReader.ReadToEnd();
if (!string.IsNullOrWhiteSpace(jsonResponse)){
T value = Util.DeserializeJsonObject<T>(jsonResponse);
return value;
}
object ret = null;
return (T) ret;
}
}catch (WebException we){
object a = null;
return (T) a;
}catch (HttpResponseException hre){
object a = null;
return (T)a;
}
}
反序列化方法:
public static T DeserializeJsonObject<T>(string json)
{
T deserizadedJson = new JavaScriptSerializer().Deserialize<T>(json);
return deserizadedJson;
}
编辑:
我正在获取我的对象 所有属性均为空时,我希望使用 JSON 对象中的值填充此属性。
我的对象:
[DataContract]
class Message
{
[DataMember]
public string ts { get; set; }
[DataMember]
public string content { get; set; }
}
我只需要改变我的模型,以适应它。现在我明白了:
响应JsonPosition:
[DataContract]
class ResponseJsonPosicao
{
[DataMember]
public Message message;
}
消息类:
[DataContract]
class Message
{
[DataMember]
public string ts { get; set; }
[DataMember]
public string content { get; set; }
}
如果你在寻找
答案时偶然发现这一点(就像我刚刚所做的那样),值得检查你的类是否有私有 setter 并且没有无参数构造函数。
public string BusinessName { get; private set; }
public string Address1 { get; private set; }
public string Address2 { get; private set; }
就我而言,我有一个包含实体的域层,这些实体没有无参数构造函数,并且都有私有资源库。反序列化器与 MVC 的自动绑定非常相似,需要一个无参数构造函数和公共资源库。
我创建了一个存根类(本地)并反序列化为该类,使用它来构建对我的实体类构造函数的调用。
public class LookedUpAddress
{
public string Address1 { get; set; }
//...
// Deserialise...
List<LookedUpAddress> addressListStub = serializer.Deserialize<List<LookedUpAddress>>(result);
// Use it to create the entity
foreach (LookedUpAddress addr in addressListStub)
{
addressList.Add(
new Address(
addr.AddressLine1,
//...