0
的XML序列化我有数据结构的以下样式:的WebAPI 2继承和隐藏属性
class OtherSummary { ... }
class OtherFullData : OtherSummary { ... }
class Summary
{
public string Name { get; set; }
public IEnumerable<OtherSummary> Stuff { get; set; }
}
class FullData : Summary
{
// hide the base member because we want full data in this class.
public new IEnumerable<OtherFullData> Stuff { get; set; }
}
在我的Web API 2控制器,有些方法返回汇总对象,而另一些返回FullData对象。这一切似乎工作,除了当返回一个FullData对象时,XML中有两个节点用于“Stuff”属性(编辑:如果输出是XML - 在JSON中看起来很好)。
一个总是空的,所以我只能假设这是被序列化的隐藏基础属性?
我不以任何方式修改api的序列化输出。
控制器方法都或多或少:
public IHttpActionResult Search(string term)
{
// do the search and map to summary objects ...
return this.Ok(summaryData);
}
// returns as expected:
<Summary>
<Name>xyz</Name>
<Stuff>
<OtherSummary>...</OtherSummary>
</Stuff>
</Summary>
public IHttpActionResult Get(int id)
{
// get data and map to a full object ...
return this.Ok(fullData);
}
// returns with phantom Stuff node:
<Summary>
<Name>xyz</Name>
<Stuff />
<Stuff>
<OtherFullData>...</OtherFullData>
</Stuff>
</Summary>
我真的希望这是作为出的现成的可能,所以没有进入编写自定义的合同解析器或东西,我失去了简单的东西,以防止这个?我原以为隐藏的财产不会被序列化。
或者,我将摘要和完整对象分开,尽管这样做有相当多的重复。
对不起,在接受答案的延迟,该项目已移动了一点,因为我张贴的问题并测试出来相当复杂,但它确实有效! –