4

wsdl.exe によって自動的に生成されるクラスがあります。プロパティの 1 つに[System.Xml.Serialization.XmlIgnoreAttribute()]属性を追加する必要がありますが、毎回再生成されるため、クラスを直接変更することはできません。ときどき。

これを行う方法はありますか?継承、部分クラス、およびリフレクションを使用してソリューションを検索しようとしましたが、運がありませんでした。顧客の制約により、私は .NET Framework 2.0 に固執しています。

(ここでこれを行う必要がある理由の詳細: DateTime 値の逆シリアル化でのタイムゾーン変換を防止します。部分クラスに文字列プロパティを追加しています)

編集: 要求されたコード スニペットは、次のように単純です。

[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://common.ws.model.plx.ids.it/")]
public partial class publication {
    private System.DateTime dateFromField;

    //[System.Xml.Serialization.XmlIgnoreAttribute()] I would like to add this
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public System.DateTime dateFrom {
        get {
            return this.dateFromField;
        }
        set {
            this.dateFromField = value;
        }
    }

    ///// This method has been moved in the other partial class
    //[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, ElementName = "dateFrom")]
    //public string dateFromString
    //{
    //    get
    //    {
    //        return XmlConvert.ToString(dateFrom, XmlDateTimeSerializationMode.RoundtripKind);
    //    }
    //    set
    //    {
    //        dateFrom = DateTimeOffset.Parse(value).DateTime;
    //    }
    //}
}
4

1 に答える 1

1

postsharp を使用して、不足している属性をプロパティに動的に追加できます。PostSharp属性を使用して属性を挿入する方法をご覧ください。.

XmlIgnore 属性をすべてのパブリック プロパティに適用する方法を示していますが、アスペクト コードを変更して、ケースで異なる動作をさせることができます。

于 2013-03-13T14:53:51.067 に答える