1

我在将 JSON 对象反序列化为我的对象时遇到了一些问题,我得到了一些可空值来确定属性。

问题:完整的对象可以为空

在这种情况下,我将获得所有对象属性的空值。

json示例:

{
  "message": {
    "ts": "11/10/13 15:07:16",
    "content": "vivo-2482573605"
  }
}

发出请求并返回反序列化对象的代码:

        public T Request<T>(IEndPoint jsonObject)
        {
            string endPoint;
            string requestType;

            endPoint = jsonObject.ToURL();
            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; }

}
4

2 回答 2

0

我只需要改变我的模型,让 json 适应它。现在我得到了这个:

ResponseJson位置:

[DataContract]
class ResponseJsonPosicao
{    
    [DataMember]
    public Message message;
}

留言类:

[DataContract]
class Message
{
    [DataMember]
    public string ts { get; set; }

    [DataMember]
    public string content { get; set; }
}
于 2013-10-26T18:29:57.087 回答
0

如果您在寻找答案时偶然发现了这一点(正如我刚刚所做的那样),那么值得检查您的类是否有私有设置器以及是否缺少无参数构造函数。

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,
                        //...
于 2015-10-27T09:47:37.150 回答