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

时间:2011-08-18 14:18:21

标签: xml xml-serialization linq-to-xml wcf-rest

我正在尝试创建一个包含来自MySQL数据库的数据的API XML。我想尝试下面的事情。

<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>

如果我打开浏览器并输入以下网址

,我可以看到上面的XML
http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb

现在,如果我需要查看“新闻”中的详细信息,我现在可以简单地将浏览器指向

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>

请记住,上面显示的所有数据都来自MySQL数据库。

我如何实现上述目标?任何示例样本,欢迎您的想法。如果有人可以投光,我将不得不承担责任。 WCF是可行的吗?或者使用普通的旧的ASP.NET XDoc等......?

请指教。万分感谢!

1 个答案:

答案 0 :(得分:0)

您可以选择使用WCF REST服务并轻松返回XML。只需使用找到here的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的外观。但它比默认选项慢。更多详情:http://msdn.microsoft.com/en-us/library/ms733901.aspx