1

我需要将 xml 根标签名称从“string”更改为“TramaOutput”。如何实现这一目标

public string ToXml() 
    { 
        XElement element = new XElement("TramaOutput", 
        new XElement("Artist", "bla"), 
        new XElement("Title", "Foo")); 
        return Convert.ToString(element);
    }

为此,输出为:

<string>
    <TramaOutput>
        <Artist>bla</Artist>
        <Title>Foo</Title>
    </TramaOutput>
</string>

在下面提到的代码中,我收到一个错误,例如“不能在架构的顶层使用通配符”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Xml.Linq;

namespace WebApplication1
{
    /// <summary>
    /// Summary description for WebService1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public XElement getXl()
        {
            XElement element = new XElement("Root",new XElement("BookId",1),new XElement("BookId",2));

            return element;
        }
    }
}
4

2 回答 2

4

您的代码生成正确的 xml,没有错误:

<TramaOutput>
    <Artist>bla</Artist>
    <Title>Foo</Title>
</TramaOutput>

您会看到<string>元素,因为您正在通过网络将此 xml 作为字符串数据类型发送。即您收到带有您的xml 内容的字符串。


更多示例 - 如果您要发送"42"字符串,您会看到

<string>42</string>

如何解决您的问题?创建以下类:

public class TramaOutput
{
    public string Artist { get; set; }
    public string Title { get; set; }
}

并从您的 Web 服务返回它的实例:

[WebMethod]
public TramaOutput GetArtist()
{
    return new TramaOutput {Artist = "bla", Title = "foo"};
}

对象将被序列化到您的 xml 中:

<TramaOutput><Artist>bla</Artist><Title>foo</Title></TramaOutput>

您不需要手动构建 xml!


如果要控制序列化过程,可以使用xml 属性。将属性应用于您的类及其成员,如下所示:

[XmlAttribute("artist")]
public string Artist { get; set; }

这会将属性序列化为属性:

<TramaOutput artist="bla"><Title>foo</Title></TramaOutput>
于 2013-06-14T07:44:16.397 回答
1

我在 .net 4.5 下检查过

Convert.ToString(element);
element.ToString();

都是退货

<TramaOutput>
    <Artist>bla</Artist>
    <Title>Foo</Title>
</TramaOutput>

您现在使用的 .NET 版本和 XML.Linq 版本是什么?

于 2013-06-14T07:48:44.757 回答