0

XmlSerialzer を使用して xml を出力する WCF サービスを作成しようとしています。特定の xml 出力が必要なため、DataContract Seriailzer を使用していません。具体的には、定義済みのスキーマなどを持つカタログ サービス web(csw) を作成しています。

最初にクラスを作成してから、出力される XML をテストしようとしています。これはかなり面倒なので、xsd ユーティリティに切り替えるかもしれません。私が知りたいのは、xml 属性を他のクラス メンバーに追加できるか、またはそれらの装飾された xmlattributes をルート要素、つまりクラス名にのみ追加できるかということです。XDocument を使用して手動で CML を記述する場合と比較して、柔軟性の問題があるようです。また、要素 (コレクションではない) をネストする必要があるたびに、新しいクラスを作成する必要があるようです。そうですか?

必要な出力 xml は次のとおりです。

<ows:ContactInfo> 
<ows:OnlineResource 
   xlink:href="mailto:­­enquiry@gis.nottscc.gov.uk­­"/> 
</ows:ContactInfo>

これが私のクラスです:

   public class ContactInfo
       {
            [XmlElement] 
            public string OnlineResource = "";        

            [XmlElementAttribute(ElementName = "OnlineResource",Namespace = "http://www.w3.org /1999/xlink")]
            public string href = "mailto:enquiry@gis.nottscc.gov.uk";

         }

次のようにxmlを出力します。

<ows:ContactInfo xlink:href="mailto:enquiry@gis.nottscc.gov.uk">
<ows:OnlineResource>mailto:enquiry@gis.nottscc.gov.uk</ows:OnlineResource>
</ows:ContactInfo>
4

1 に答える 1

2

これを実現するには、オブジェクトモデルを変更する必要があります...次のようなものを試してください...

 [XmlType("ContactInfo")]
 public class ContactInfo
 {
    [XmlElement("OnlineResource")]
    public OnlineResource Resource { get; set; }
 }

 [XmlType("OnlineResource")]
 public class OnlineResource
 {
     [XmlAttribute("href")]
     public string href = "mailto:enquiry@gis.nottscc.gov.uk";
 }

このための出力は...

<ContactInfo>
  <OnlineResource href="mailto:enquiry@gis.nottscc.gov.uk" />
</ContactInfo>

当然、名前空間などを取得するために調整する必要がありますが、これは正しい方向に向かっています...それが役立つことを願っています:)

はい..要素をネストするときは、新しいクラスが必要になります...これは理にかなっていますか?プリミティブはどのようにしてネストされた値のセットになりますか?

于 2012-05-15T12:33:35.937 に答える