0

私の WCF Web サービスは、ダウンロード用の xml ファイルを返す必要があります。その機能のために、1 つのクラスからオブジェクトのリストをシリアル化する必要があります。ここでそのクラス定義:

[DataContract]
    public class ReportItemDriversPerAffiliate : IReportItemDriversPerAffiliate
    {
        [DataMember(Name = "affiliate_name")]
        public string AffiliateName { get; set; }

        [DataMember(Name = "affiliate_city")]
        public string AffiliateCity { get; set; }

        [DataMember(Name = "affiliate_state")]
        public string AffiliateState { get; set; }

        [DataMember(Name = "drivers_count")]
        public int DriversCount { get; set; }
    }

そして、この機能のために私はこのコードを使用します:

var totalDriversPerAffiliate = _glManager.GetTotalDriversPerAffiliate<ReportItemDriversPerAffiliate>();

            XmlSerializer ser = new XmlSerializer(totalDriversPerAffiliate.GetType());

            MemoryStream ms = new MemoryStream();
            ser.Serialize(ms, totalDriversPerAffiliate);
            ms.Position = 0;

            StreamReader r = new StreamReader(ms);
            string res = r.ReadToEnd();

            var context = System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse;
            context.Headers.Add("Content-Disposition", "attachment; filename=TotalDriversPerAffiliate.xml");
            context.ContentType = "application/txt";

            byte[] resultBytes = Encoding.UTF8.GetBytes(res);
            return new MemoryStream(resultBytes);

しかし、応答ファイルには、WCF表示名属性の値ではなく、クラスプロパティの値を持つxmlのフィールドがあります(「AffiliateName」があり、「affiliate_name」が必要です)、このクラスを手動でシリアル化し、表示のようなxmlにフィールドを含める方法クラスの名前属性?また、このクラスに追加の xml 属性を追加したくありません。また、このデータを xml 応答として返す Web サービスで別のメソッドを作成したくありません。

4

1 に答える 1

0

XmlSerializer は DataMember 属性を無視します。NetDataContractSerializer を試してください。

于 2012-10-23T16:51:33.993 に答える