2

次のようなオブジェクトがある場合:

[XmlRoot("Person")]
public class Person
{
   [XmlElement("LastName")]
   public string Last {get;set;}

   [XmlElement("FirstName")]
   public string First {get;set;}

   [XmlElement("Banners")]
   public List<Banner> Banners {get;set;}
}

[XmlType("Banner")]
public class Banner
{
    [XmlElement("Title")]
    public string Title {get;set;}

    [XmlElement("Location")]
    public string Location {get;set;}
}

ローカルでシリアル化すると、問題ないように見えます

<Person>
   <LastName/>
   <FirstName/>
   <Banners>
       <Banner>
          <Title/>
          <Location/>
       </Banner>
    </Banners>
 </Person>

しかし、ライブラリを作成して WCF IIS サービスからホストし、それをクライアント アプリケーションから使用したい場合は、Person オブジェクトにアクセスし、パラメータを入力してから xml 文字列にシリアル化すると、次のようになります。

<Person>
   <Banners>
       <Banner>
          <Location/>
          <Title/>
       </Banner>
    </Banners>
   <FirstName/>
   <LastName/>
</Person>

すべてのノードは、ルートの後のレベルごとにアルファベット順に表示されます。XmlElement 属性で Order キーワードを使用しようとしましたが、見た目にはわかりません。

オブジェクトをローカルで使用してシリアル化すると、 Order キーワードに従います。私は何を間違っていますか?

ありがとう

4

1 に答える 1

1

XmlSerializer は必須ですか?

WCF は、既定で DataContractSerializer を使用しています。

だから私はそれに切り替えます。

属性はDataMember- ではなく ですXmlElement

DataMember を使用すると、DataContract シリアライザーによって受け入れられる注文値を追加できます。

[DataMember(Order = 0)]
public string FirstName { get; set; }
[DataMember(Order = 1)]
public string LastName { get; set; }
[DataMember(Order = 2)]
public string Email { get; set; }
[DataMember(Order = 3)]
public string Password { get; set; }
于 2012-12-12T22:24:26.023 に答える