我在将JSON对象反序列化到我的对象时遇到了一些问题,我得到了一些可以确定属性的可空值。
在这种情况下,我将所有对象属性都设为null值。
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;
}
修改
我正在获取我的对象所有属性为null,我希望使用JSON对象中的值填充此属性。
我的对象:
[DataContract]
class Message
{
[DataMember]
public string ts { get; set; }
[DataMember]
public string content { get; set; }
}
答案 0 :(得分:0)
我只需改变我的模型,让json适应它。现在我明白了:
ResponseJsonPosition:
[DataContract]
class ResponseJsonPosicao
{
[DataMember]
public Message message;
}
消息类:
[DataContract]
class Message
{
[DataMember]
public string ts { get; set; }
[DataMember]
public string content { get; set; }
}
答案 1 :(得分:0)
如果您在寻找答案时偶然发现了这一点(正如我刚才所做的那样),那么有必要检查您的班级是否有私人制定者以及缺少无参数构造函数。
public string BusinessName { get; private set; }
public string Address1 { get; private set; }
public string Address2 { get; private set; }
在我的情况下,我有一个带有实体的域层,它没有无参数构造函数,并且都有私有的setter。反序列化器与MVC的自动绑定非常相似,需要无参数构造函数和公共setter。
我创建了一个存根类(本地)并反序列化,使用它来构建对我的实体类构造函数的调用。
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,
//...