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

时间:2020-08-25 22:58:08

标签: c# json list null converters

首先,感谢您抽出宝贵的时间对此进行研究。相当多。 题: 我基本上是想下载一个json作为字符串,然后反序列化到一个列表。原因是这样,然后我可以调用该列表的特定属性(在我的情况下为“ ips”,因为这是我实际需要的所有属性),如果满足要求,可以将其插入表中。 问题在于它将所有空值移入数组。 114列的null或空数组,我不知道为什么? 我认为我会在JSON上附加一个链接,因为它的文件很大https://endpoints.office.com/endpoints/Worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

这是我的代码:

  1. JSON的字母和字母
       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. 我将我的列表反序列化为单独的变量
var o365IpVerion = JsonConvert.DeserializeObject<List<ConvertJsonIP>>(o365IP);

此代码未显示任何错误。所以我只能假设这是合乎逻辑的。应该注意的是,我不得不放入

严重的是,我已经坚持了3天,因此对此的任何帮助将不胜感激!预先感谢!

2 个答案:

答案 0 :(得分:2)

您拥有的json是对象列表,并且这些对象中的每一个都符合GetSetJsonIp。您应该使用List<GetSetJsonIP>

反序列化
var o365IpVerion = JsonConvert.DeserializeObject<List<GetSetJsonIP>>(o365IP);

答案 1 :(得分:1)

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