JSON(反序列化)将空值发送到列表



首先感谢您花时间研究此问题。这相当多。问题:我基本上是尝试将json下载为字符串,然后将其反序列化为列表。原因是,如果满足要求,我可以调用该列表的特定属性(在我的情况下是"ips",因为这是我实际需要的全部(,并将其插入到表中。问题是,它会将所有null值移动到数组中。114列的null或空数组,我不明白为什么?我想我会附上一个JSON的链接,因为它是一个巨大的文件,在这里https://endpoints.office.com/endpoints/Worldwide?clientRequestId=b10c5ed1-bad1-45f-b386-b919946339a7

这是我的代码:

  1. JSON的Getter和setter
    public class GetSetJsonIP {
    [JsonProperty("id")]
    public int id { get; set; }
    [JsonProperty("serviceArea")]
    public string ServiceArea { get; set; }
    [JsonProperty("serviceAreaDisplayName")]
    public string ServiceAreaDisplayName { get; set; }
    [JsonProperty("urls")]
    public IList<string> urls { get; set; }
    [JsonProperty("ips")]
    public IList<string> ips { get; set; }
    [JsonProperty("tcpPorts")]
    public string tcpPorts { get; set; }
    [JsonProperty("expressRoute")]
    public bool expressRoute { get; set; }
    [JsonProperty("category")]
    public string category { get; set; }
    [JsonProperty("required")]
    public bool required { get; set; }
    [JsonProperty("notes")]
    public string notes { get; set; }
    [JsonProperty("udpPorts")]
    public string udpPorts { get; set; }
    }
    
  2. 列表类
public class ConvertJsonIP{
public List<GetSetJsonIP> jsonIpConvert { get; set; }
public List<GetSetJsonIP> jsonIPConvert = new List<GetSetJsonIP>();
}

3.我使用一个名为o365IP 的空字符串下载JSON

o365IP = wc.DownloadString(wc.BaseAddress + "/endpoints/Worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7");
  1. 我使用List将其反序列化为一个单独的var
var o365IpVerion = JsonConvert.DeserializeObject<List<ConvertJsonIP>>(o365IP);

此代码没有显示任何错误。所以我只能假设这是一个合乎逻辑的问题。应该注意的是,我不得不把<列表<in来停止一个错误,该错误指出它无法将对象转换为数组。

说真的,我已经被困了3天了,所以如果能在这方面提供任何帮助,我将不胜感激!提前感谢!

您拥有的json是一个对象列表,其中每个对象都符合GetSetJsonIp。您应该使用List<GetSetJsonIP>进行反序列化

var o365IpVerion = JsonConvert.DeserializeObject<List<GetSetJsonIP>>(o365IP);

public class GetJsonIP工作正常。

必须将Deserialize转换为List<>的原因是json对象以一个括号开头,使整个对象成为Listarray

var O365IpVersion = JsonConvert.DeserializeObject<List<GetJsonIP>(O365IP);

获取某个属性的值有不同的方法。如果你只需要ips,并且想检查值然后更新它,那么你可以循环:

JArray arr = JArray.Parse(O365IP);
foreach (JObject obj in arr.Children<JObject>())
{
foreach (JPRoperty prop in obj.Properties().Where(x => x.Name == "ips"))
{
//use prop.Value and perform tasks
}
}

或者简单地循环如下:

for (int i = 0; i < O365IpVersion.Count; i++)
{
//use O365IpVersion.ElementAt(i).ips

相关内容

  • 没有找到相关文章

最新更新