4

次のように定義されている既存のコードを使用しています。

class Example
{
    public float x_field;
    public float x_property
    {
        get { return x_field; }
        set { x_field = value; }
    }
}

なぜこのように定義されているのかはわかりませんが、実装を変更することはできません。問題は、シリアル化すると、明らかにxml出力で両方の値を取得することです。'Example'クラスを変更できない場合、どうすればこれが発生しないようにできますか?

Serializerがパブリックプロパティのみを出力し、パブリックフィールドは出力しないようにしたい。

4

2 に答える 2

6

XmlSerializerのXmlAttributeOverrideパラメーターを使用できます。

XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributes = new XmlAttributes();
attributes.XmlIgnore = true;
overrides.Add(typeof(Example), "x_field", attributes);

XmlSerializer xs = new XmlSerializer(typeof(Example), overrides);
于 2012-11-16T13:06:17.990 に答える
1

中間オブジェクトを使用します。シリアル化する正確なモデルを作成するために制御できるもの。

class IntermdeiateModel
{
     public float x+property {get;set;}
}
....

return Serializer.Serialze(GetAllEamples().Select(e => new IntermdeiateModel { x_property = e.x_property));
于 2012-11-16T13:07:36.380 に答える