json.net具有默认值的返回对象



我正在尝试对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服务中使用其一些继承的类,事实证明,这就是打破了避免化的原因。删除属性或不从数据合同类继承的属性解决该问题。

相关内容

  • 没有找到相关文章

最新更新