gpt4 book ai didi

c# - 使用 newtonsoft 将 json 字符串反序列化为 c# 对象

转载 作者:行者123 更新时间:2023-11-30 17:38:30 25 4
gpt4 key购买 nike

我一直在处理这个项目,我必须调用外部 RESTful 服务来获取一些数据。

我在这里面临的问题是,我从服务中获得的响应在不同情况下是不同的。例如。

在一种情况下,我得到的响应低于

{  
"id":3000056,
"posted_date":"2016-04-15T07:16:47+00:00",
"current_status":"initialized",
"customer":{
"name" : "George",
"lastName" : "Mike"
},
"application_address":{
"addressLine1" : "Lin1",
"addressLine2" : "Lin2",
}

}

在另一种情况下,我得到低于响应

 {  
"id":3000057,
"posted_date":"2016-04-15T07:16:47+00:00",
"current_status":"initialized",
"customer":[],
"application_address":[]

}

这里的问题是,我有以下模型,我正在通过 newtonsoft 反序列化对其进行反序列化。

public class Response
{

[JsonProperty("id")]
public int Id { get; set; }

[JsonProperty("posted_date")]
public DateTime PostedDate { get; set; }

[JsonProperty("current_status")]
public string CurrentStatus { get; set; }

[JsonProperty("customer")]
public Customer Customer { get; set; }

[JsonProperty("application_address")]
public ApplicationAddress ApplicationAddress { get; set; }


}


public Class Customer
{

public string name { get; set; }
public string lastName { get; set; }
}

public classs ApplicationAddress
{
public string addreesLine1{ get; set; }
public string addreesLine1{ get; set; }
}

对于第一个响应,它会反序列化。但是对于第二个响应,响应没有被反序列化,因为响应包含 Customer[]ApplicationAddrees 对象。反序列化时,它被当成一个数组,但实际上它不是。

注意:下面是我用于反序列化的代码。响应 response = JsonConvert.DeserializeObject(result);

在序列化之前我们可以做一些配置吗? newtonsoft 是否促进了该功能?

谢谢。

最佳答案

如果您确定此属性中不会有数组,那么您可以考虑像这样使用 JsonConverter:

public class FakeArrayToNullConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return false;
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return null;
}
return token.ToObject<T>();

}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}

然后为您的模型添加额外的属性:

    [JsonProperty("customer")]
[JsonConverter(typeof(FakeArrayToNullConverter<Customer>))]
public Customer Customers { get; set; }

[JsonProperty("application_address")]
[JsonConverter(typeof(FakeArrayToNullConverter<ApplicationAddress>))]
public ApplicationAddress ApplicationAddressList { get; set; }

当此属性在您的 JSON 字符串中时,它将是一个数组 [],您只需使用 null 对象将其反序列化。

关于c# - 使用 newtonsoft 将 json 字符串反序列化为 c# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com