0

新しいキーワードが原因で、XML要素「Event」が2回シリアル化されるという問題があります。派生型をシリアル化するだけにしたい。

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

1 に答える 1

1

基本クラス[DataMember]のプロパティにマークを付けないでくださいEventApiDivision

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; }
}
于 2012-09-30T07:27:45.107 に答える