在ASP.NET中动态创建XML(内存)并在浏览器中显示

在ASP.NET中动态创建XML(内存)并在浏览器中显示,xml,xml-serialization,linq-to-xml,wcf-rest,Xml,Xml Serialization,Linq To Xml,Wcf Rest,我正在尝试创建一个API XML,其中包含来自MySQL数据库的数据。我正试着做下面这样的事情 <api xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <key>eee83d24-906b-4736-91d9-1031621b79eb</key> <name>API Test<

我正在尝试创建一个API XML,其中包含来自MySQL数据库的数据。我正试着做下面这样的事情

<api xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <key>eee83d24-906b-4736-91d9-1031621b79eb</key>
    <name>API Test</name>
    <feedState>Test</feedState>
    <news href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/"/>
    <comments href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/comments/"/>
</api>
现在,如果我需要查看“新闻”中的详细信息,我只需将浏览器指向

http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news 
这样做之后,我会看到

<news xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" state="Trial">
 <newsListItem href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/800577419/">
   <id>800577419</id>
   <publishDate>2011-08-17</publishDate>
   <lastModifiedDate>2011-08-17</lastModifiedDate>
   <headline>Google buys Motorola</headline>
</newsListItem>
<newsListItem href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/800577416/">
   <id>800577416</id>
   <publishDate>2011-08-17T15:13:12</publishDate>
   <lastModifiedDate>2011-08-17T15:14:36</lastModifiedDate>
   <headline>Apple Macbook Air</headline>
 </newsListItem>
</news>

800577419
2011-08-17
2011-08-17
谷歌收购摩托罗拉
800577416
2011-08-17T15:13:12
2011-08-17T15:14:36
苹果MacBookAir
记住上面显示的所有数据都来自MySQL数据库

我怎样才能实现上述目标?欢迎提供任何示例、样品和想法。如果有人能点灯,我将不胜感激。WCF是一条路吗?还是使用普通的旧ASP.NET XDoc等


请告知。非常感谢

您可以选择使用WCF REST服务并轻松返回XML。只需使用找到的Visual Studio项目模板创建一个项目。 若已经定义了从MySQL数据库读取数据的类,那个么可以返回它们,并让WCF为您序列化。这样,您就不必使用XDoc/XElement来构建XML。 方法和服务类的外观如下所示:

[ServiceContract]
[XmlSerializerFormat]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class APIService
{
  [WebGet(UriTemplate = "{key}", ResponseFormat = WebMessageFormat.Xml)]
  public APIData GetAPIData(string key)
  {
    // build apiData object from DB using "key"
    return apiData
  }

  [WebGet(UriTemplate = "{key}/news", ResponseFormat = WebMessageFormat.Xml)]
  public APINewsData GetAPINewsData(string key)
  {
    // build apiNewsData object from DB using "key"
    return apiNewsData
  }


}

如果使用XmlSerializer类(通过如上所述指定[xmlSerializerFormat]属性)而不是DataContractSerializer类(默认WCF序列化器),则可以更好地控制返回XML的外观。但它比默认选项慢。更多详细信息:

谢谢。我使用带有XDoc和XElement的RouteTables来创建XML。根据我们的应用程序结构,WCF有一些局限性,所以不想这样做。但我很感激你的回应。
[ServiceContract]
[XmlSerializerFormat]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class APIService
{
  [WebGet(UriTemplate = "{key}", ResponseFormat = WebMessageFormat.Xml)]
  public APIData GetAPIData(string key)
  {
    // build apiData object from DB using "key"
    return apiData
  }

  [WebGet(UriTemplate = "{key}/news", ResponseFormat = WebMessageFormat.Xml)]
  public APINewsData GetAPINewsData(string key)
  {
    // build apiNewsData object from DB using "key"
    return apiNewsData
  }


}