3

Web サービスに配信してもらいたい XML は次のとおりです。

<business>
  <locations>
    <location>location 1</location>
    <location>location 2</location>
  </locations>
</business>

ただし、代わりに以下が返されます。

<business>
  <locations>
    <location>
      <name>location 1</name>
    </location>
    <location>
       <name>location 2</name>
    </location>
  </locations>
</business>

使用されるコードは次のとおりです。

    [WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
    public Business GetBusiness()
    {
        var business = new Business();
        business.Locations = new List<Location>();
        business.Locations.Add(new Location { Name = "location 1" });
        business.Locations.Add(new Location { Name = "location 2" });
        return business;
    }

    [XmlType(TypeName = "business")]
    public class Business
    {
        [XmlArray(ElementName = "locations")]
        [XmlArrayItem(ElementName = "location")]
        public List<Location> Locations { get; set; }
    }

    [XmlType(TypeName = "location")]
    public class Location
    {
        [XmlElement(ElementName = "name")]
        public string Name { get; set; }
    }

名前タグの代わりに場所タグを含む場所文字列を取得するにはどうすればよいですか?

ティア、ジョージ

4

3 に答える 3

3

XML 要素のテキストとして扱うには、メンバーでXmlTextAttributeを使用する必要があります。Name

[XmlType(TypeName = "location")]
public class Location
{
    [XmlText()]
    public string Name { get; set; }
}
于 2012-08-11T20:38:59.387 に答える
1

位置オブジェクトのリストの代わりに、位置に文字列のリストを使用しないのはなぜですか?

    [WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
    public Business GetBusiness()
    {
        var business = new Business();
        business.Locations = new List<string>();
        business.Locations.Add("location 1");
        business.Locations.Add("location 2");
        return business;
    }

    [XmlType(TypeName = "business")]
    public class Business
    {
        [XmlArray(ElementName = "locations")]
        [XmlArrayItem(ElementName = "location")]
        public List<string> Locations { get; set; }
    }

    //[XmlType(TypeName = "location")]
    //public class Location
    //{
    //    [XmlElement(ElementName = "name")]
    //    public string Name { get; set; }
    //}

その結果、探している XML が生成されます。

于 2012-08-11T20:45:14.990 に答える
0

MSDN: http://msdn.microsoft.com/en-us/library/ty01x675%28v=vs.80%29.aspxで指定されているいくつかの方法を使用して、シリアル化と逆シリアル化のプロセスを制御できます。

あなたの場合、ElementName「場所」を使用して、場所のリストをシリアル化しています。文字列のリストをシリアル化していた場合public List<string> Locations {get; set; }、期待される結果が得られます。使用する Location オブジェクトは、階層に余分なレベルを配置するため、独自のプロパティ (名前など) を使用して独自にシリアル化されます。

ISerializableクラスにインターフェイスを実装するLocationsと、生成された XML 出力を完全に制御でき、'Name' プロパティの内容を簡単に返すことができます。

于 2012-08-11T20:55:00.307 に答える