首先,感谢您抽出宝贵的时间对此进行研究。相当多。 题: 我基本上是想下载一个json作为字符串,然后反序列化到一个列表。原因是这样,然后我可以调用该列表的特定属性(在我的情况下为“ ips”,因为这是我实际需要的所有属性),如果满足要求,可以将其插入表中。 问题在于它将所有空值移入数组。 114列的null或空数组,我不知道为什么? 我认为我会在JSON上附加一个链接,因为它的文件很大https://endpoints.office.com/endpoints/Worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7
这是我的代码:
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; }
}
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");
var o365IpVerion = JsonConvert.DeserializeObject<List<ConvertJsonIP>>(o365IP);
此代码未显示任何错误。所以我只能假设这是合乎逻辑的。应该注意的是,我不得不放入 严重的是,我已经坚持了3天,因此对此的任何帮助将不胜感激!预先感谢!
答案 0 :(得分:2)
您拥有的json是对象列表,并且这些对象中的每一个都符合GetSetJsonIp
。您应该使用List<GetSetJsonIP>
var o365IpVerion = JsonConvert.DeserializeObject<List<GetSetJsonIP>>(o365IP);
答案 1 :(得分:1)
public class GetJsonIP
工作正常。
您必须Deserialize
进入List<>
的原因是因为json对象以括号开头,使得整个对象成为List
或array
。
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