0

我有一個問題,由於新關鍵字,XML元素「Event」正在序列化兩次。我希望派生類型只能被序列化。DataContractSerialization和新的關鍵字繼承

[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> 

回答

1

在基類中的財產Event不要標記[DataMember]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; } 
} 
+0

什麼如果我使用基類其他地方使用那些p序列化期間的性能。 –

+0

@MikeFlynn:我編輯了我的答案 –