我遇到一个问题,即由于new关键字,XML元素“Event”被序列化了两次。我希望派生类型只能被序列化。
[DataContract(Name = "Division", Namespace = "")]
public class ApiTeamDivision : ApiDivision
{
[DataMember]
public new ApiTeamEvent Event { get; set; }
[JsonIgnore]
public new ApiDivisionSettings Settings { get; set; }
[JsonIgnore]
public new List<ApiPrice> Prices { get; set; }
[JsonIgnore]
public new List<ApiTeam> Teams { get; set; }
[JsonIgnore]
public new List<ApiAsset> Assets { get; set; }
[JsonIgnore]
public new List<ApiBracket> Brackets { get; set; }
}
<Division>
<Age>17</Age>
<Event i:nil="true"/>
<Event>
<Address i:nil="true"/>
<Assets i:nil="true"/>
<Description i:nil="true"/>
<Divisions i:nil="true"/>
</Event>
</Division>
答案 0 :(得分:1)
请勿在基类[DataMember]
Event
属性上标记ApiDivision
class ApiDivision
{
//[DataMember] => don't mark this
public new ApiTeamEvent Event { get; set; }
}
如果您使用[DataContract]
,则无需使用属性[JsonIgnore]
,因为它用于以下两种格式:json和Xml。
因此,如果您想忽略序列化中的属性,请不要使用属性[DataMember]
[DataContract(Name = "Division", Namespace = "")]
public class ApiTeamDivision : ApiDivision
{
[DataMember]
public new ApiTeamEvent Event { get; set; }
public new ApiDivisionSettings Settings { get; set; }
public new List<ApiPrice> Prices { get; set; }
public new List<ApiTeam> Teams { get; set; }
public new List<ApiAsset> Assets { get; set; }
public new List<ApiBracket> Brackets { get; set; }
}
修改:
或者您可以使用(IsRequired=false, EmitDefaultValue=false)
来忽略属性是null
:
class ApiDivision
{
[DataMember(IsRequired=false, EmitDefaultValue=false)]
public new ApiTeamEvent Event { get; set; }
}