反序列化 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; }    
}

反序列化 Json 对象空值

我只需要改变我的模型,以适应它。现在我明白了:

响应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,
                        //...