0

XML要素のシリアル化、特に配列/コレクションのルートタグの削除に問題があります

 public Class Part
    {
        public Guid Id { get; set; }
        [System.Xml.Serialization.XmlElementAttribute(IsNullable = false)]
        [DataMember(IsRequired = true)]
        public string PartNumber { get; set; }

        [System.Xml.Serialization.XmlElementAttribute(IsNullable = false)]
        [DataMember(IsRequired = true)]
        public string PartName { get; set; }

        [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
        public string Description { get; set; }

        [System.Xml.Serialization.XmlElementAttribute(IsNullable = false)]
        public DateTime LastUpdated { get; set; }

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

wcf はこれをシリアライズします

 <b:Part>
            <b:PartDetail xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
              <c:string>ABC</c:string>
            </b:PartDetail>
            <b:PartDetail xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
              <c:string>DEF</c:string>
            </b:PartDetail>
            <b:Description> JGHGS SGHSGH SJGHSJG</b:Description>
            <b:Id>740ead2d-84e8-4da0-9115-28dea5f0bd28</b:Id>
            <b:LastUpdated>2012-11-30</b:LastUpdated>
            <b:PartName>AAA BBB CCC DDDD</b:PartName>
            <b:PartNumber>1</b:PartNumber>
          </b:Part>

私が必要とするもの

 <b:Part>
                <b:PartDetail xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays">ABC</b:PartDetail>
                <b:PartDetail xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays">DEF</b:PartDetail>             

                <b:Description> JGHGS SGHSGH SJGHSJG</b:Description>
                <b:Id>740ead2d-84e8-4da0-9115-28dea5f0bd28</b:Id>
                <b:LastUpdated>2012-11-30</b:LastUpdated>
                <b:PartName>AAA BBB CCC DDDD</b:PartName>
                <b:PartNumber>1</b:PartNumber>
              </b:Part>

私はSOで同様の質問を見つけましたが、WCFでそれを使用する方法について決定的な答えが得られませんでした(理解できなかった可能性があります)。

基本的に欲しい

<ArrayPropertyName>ABC</ArrayPropertyName>
<ArrayPropertyName>DEF</ArrayPropertyName>
<ArrayPropertyName>GHI</ArrayPropertyName>

それ以外の

<ArrayPropertyName>
<string> ABC</string>
<string> DEF</string>
<string> GHI</string>
</ArrayPropertyName>

wcf が xml シリアル化されたデータを送信する前に、タグを検索して削除することは可能ですか?

質問が明確かどうか教えてください。

4

1 に答える 1

0

これを実現するには、次のような PartDetail クラスを作成する必要があります。

public class PartDetail
{
    [XmlText()] 
    public string value;
}    

public Class Part
{

     [XmlElement("PartDetail")]
     public PartDetail[] PartDetails { get; set; }

}
于 2012-12-28T19:45:30.330 に答える