C# 如何更改xml中的根标记名称

C# 如何更改xml中的根标记名称,c#,asp.net,xml,web-services,C#,Asp.net,Xml,Web Services,我需要将xml根标记名从“string”更改为“TramaOutput”。如何做到这一点 public string ToXml() { XElement element = new XElement("TramaOutput", new XElement("Artist", "bla"), new XElement("Title", "Foo")); return Convert.ToString(element

我需要将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>

布拉
福
在下面提到的代码中,我遇到了一个类似“不能在模式的顶层使用通配符”的错误

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Services;
使用System.Xml.Linq;
命名空间WebApplication1
{
/// 
///WebService 1的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
//要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。
//[System.Web.Script.Services.ScriptService]
公共类WebService 1:System.Web.Services.WebService
{
[网络方法]
公共XElement getXl()
{
XElement元素=新XElement(“根”,新XElement(“BookId”,1),新XElement(“BookId”,2));
返回元素;
}
}
}

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

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

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

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>
将属性序列化为属性的:

<TramaOutput artist="bla"><Title>foo</Title></TramaOutput>
foo

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

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

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

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>
将属性序列化为属性的:

<TramaOutput artist="bla"><Title>foo</Title></TramaOutput>
foo

我在.net 4.5下检查了它

Convert.ToString(element);
element.ToString();
都回来了吗

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

布拉
福

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

我在.NET 4.5下检查了这两个版本

Convert.ToString(element);
element.ToString();
都回来了吗

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

布拉
福


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

您的错误在别处-此代码输出XML时没有
标记。如何保存xml?顺便说一句,
XElement
不是
IConvertable
IFormattable
所以
Convert.ToString(element)
内部只需调用
element.ToString()。[0]:@lazyberezovsky这是webservice的回应xml@Vignesh使用属性
Artist
Title
创建类
TramaOutput
。创建此类的实例并将其作为响应发送。对象将序列化为xml。当前您正在发送字符串,该字符串已序列化为xml。您的错误在别处-此代码输出的xml没有
标记。如何保存xml?顺便说一句,
XElement
不是
IConvertable
IFormattable
所以
Convert.ToString(element)
内部只需调用
element.ToString()。[0]:@lazyberezovsky这是webservice的回应xml@Vignesh使用属性
Artist
Title
创建类
TramaOutput
。创建此类的实例并将其作为响应发送。对象将序列化为xml。当前您正在发送字符串,该字符串被序列化为xml。因此,您的意思是
返回Convert.ToString(元素)
创建
标记?@MichaelPerrenoud不,我的意思是发送字符串数据类型创建
标记。所以OP将数据发送给接收者的过程(更具体地说是发送的类型)就是问题所在。@lazyberezovsky我已经试过你的代码了,现在可以工作了,谢谢你的帮助。我还有一个查询,如果我想为xml标记使用属性,那么我需要做什么do@Vignesh您可以为此使用XmlAttribute属性。请参阅更新的答案和链接。您是否暗示
返回Convert.ToString(元素)
创建
标记?@MichaelPerrenoud不,我的意思是发送字符串数据类型创建
标记。所以OP将数据发送给接收者的过程(更具体地说是发送的类型)就是问题所在。@lazyberezovsky我已经试过你的代码了,现在可以工作了,谢谢你的帮助。我还有一个查询,如果我想为xml标记使用属性,那么我需要做什么do@Vignesh您可以为此使用XmlAttribute属性。请参阅更新的答案和链接