我正在尝试对JSON字符串进行挑选,但它一直在返回具有默认值(false,null等)的对象。
我与之合作的JSON来自Web服务,并且很长。我在这里粘贴了:https://pastebin.com/6lrfsvje
结构是以下内容:
"Data": [SITE, SITE, SITE, etc.]
"Success": BOOLEAN,
"Message": STRING,
网站看起来像这样:
"__type" : STRING
"ID": INTEGER,
"UniqueIdentifier": GUID/STRING,
"Network": INTEGER,
"LandOwner": INTEGER (nullable),
"PermitHolder": INTEGER (nullable),
"Name": STRING,
"Alias": STRING (unique),
"Notes": STRING,
"Latitude": DOUBLE (nullable),
"Longitude": DOUBLE (nullable),
"Elevation": DOUBLE (nullable),
"TimeZoneName": STRING,
"TimeZoneAbbreviation": STRING,
"TimeZoneOffset": INTEGER,
"CreationDate": STRING ISO-8601,
"ModificationDate": STRING ISO-8601,
"GPSLandmark": STRING
我已经在c#中复制了这些,以与json.net一起使用:
public class SiteList
{
public bool Success { get; set; }
public string Message { get; set; }
public IList<Site> Data { get; set; }
}
public class Site
{
public string __type { get; set; }
public int ID { get; set; }
public string UniqueIdentifier { get; set; }
public int Network { get; set; }
public int LandOwner { get; set; }
public int PermitHolder { get; set; }
public string Name { get; set; }
public string Alias { get; set; }
public string Notes { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Elevation { get; set; }
public string TimeZoneName { get; set; }
public string TimeZoneAbbreviation { get; set; }
public int TimeZoneOffset { get; set; }
public string CreationDate { get; set; }
public string ModificationDate { get; set; }
public string GPSLandmark { get; set; }
}
而且我必须这样做:
string message = /* I make my service call here - same string as the JSON pasted above */
var sitelist = JsonConvert.DeserializeObject<Infrastructure.SiteList>(message);
如果我的数据结构不正确,我希望json.net函数返回null。但是它实际上确实返回了一个sitelist,只是带有data = null,message = null,success = false。
的值。此代码几天前工作,但是最近更改了Web服务,网站数据结构现在包含__Type字段。从那时起,避难所就失败了。
我尝试完全不包括__Type字段,将其命名为" type"," type"," __ type"," __ type",但我总是得到相同的结果。我不确定json.net如何匹配变量名称,但是__Type字段的引入似乎确实引起了问题,并且名称不遵循以前的约定。
。有人有解决方案还是看到我可能忽略的任何错误?
修复:
我从未提到过我的Sitelist和网站是从抽象基类继承的 - 它继承了这一事实从未弄乱该功能。但是,我最近在此基类中添加了[Datacontract]属性,以便我可以在自己的Web服务中使用其一些继承的类,事实证明,这就是打破了避免化的原因。删除属性或不从数据合同类继承的属性解决该问题。