クラスをシリアル化しようとするとエラーが発生します。 xmlスキーマはサードパーティによって定義されており、変更することはできません。同じ名前で属性が異なる2つのプロパティをシリアル化します
XMLは(のみところでスニペット)を次のようになります。私は私の注文日
[Serializable]
public class OrderDate
{
public enum OrderDateTypeEnum
{
[Description("entered-date")]
EnteredDate,
[Description("received-date")]
ReceivedDate,
[Description("required-date")]
RequiredDate
}
private OrderDateTypeEnum _typeEnum;
[XmlIgnore]
public OrderDateTypeEnum TypeEnum
{
get { return this._typeEnum; }
set
{
this._typeEnum = value;
this.Type = this._typeEnum.GetDescription();
}
}
[XmlAttribute("type")]
public string Type { get; set; }
[XmlText]
public string Name { get; set; }
}
のための次のクラスを定義したと順序クラスは次のように定義されて
<order>
<date type="received-date">20160810</date>
<date type="required-date">20160810</date>
<reference type="cust-order-no">CCCC</reference>
<reference type="an-2">AAAA</reference>
<reference type="an-3">BBBB</reference>
<order>
:
[Serializable]
public class Order
{
[XmlElement("date")]
public OrderDate EnteredDate { get; set; }
[XmlElement("date")]
public OrderDate ReceivedDate { get; set; }
[XmlElement("date")]
public OrderDate RequiredDate { get; set; }
}
これをシリアル化すると、エラーが発生します。
The XML element 'date' from namespace '' is already present in the current
scope. Use XML attributes to specify another XML name or namespace for the
element.
[XmlElement("date")]
を削除すると機能しますが、xmlは必要な方法でフォーマットされていません。
私はそれに触れると、まったく同じ問題が発生します。
この問題を回避するにはどうすればよいですか?
'ReceivedDate'プロパティの' [XmlElement( "date")] 'の代わりに' [XmlElement( "received-date")] 'でなければなりませんか?同じ日付が必要です。 XMLには「EnteredDate」はありません。 – user3185569
@ user3185569、理想的にはyesですが、あなたが提案したことをすれば、そのメモは ではなく、 これは、私のシナリオではうまくいかないことを覚えているように、私はxmlが第三者から来るように私に提示される形式を変更することはできません。 –
Thierry