gpt4 book ai didi

c# - WCF Restful Webservice 将数据表序列化为 XML

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:26 26 4
gpt4 key购买 nike

我正在使用框架 4.0 的 WCF Restful 网络服务。我想将数据表序列化为 XML 并返回生成的 XML。我有这个工作,但我忍不住觉得有更好的方法。

我最初开始做以下事情:

[WebGet(UriTemplate = "")]
public DataTable helloWorld()
{
using (DataTable dt = new DataTable("Test"))
{
dt.Columns.Add("Message");
dt.Rows.Add(dt.NewRow());
dt.Rows[0]["Message"] = "Hello World";

return dt;
}
}

这给了我以下不良结果:

<DataTable xmlns="http://schemas.datacontract.org/2004/07/System.Data">
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Test" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Message" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<DocumentElement xmlns="">
<Test diffgr:id="Test1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<Message>Hello World</Message>
</Test>
</DocumentElement>
</diffgr:diffgram>
</DataTable>

经过一番修改后,我想出了下面的代码,它有点笨拙。有没有更好的办法?为什么我不能处理内存流?我有内存泄漏吗?

[WebGet(UriTemplate = "")]
public Stream helloWorld()
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";

using (DataTable dt = new DataTable("Test"))
{
dt.Columns.Add("Message");
dt.Rows.Add(dt.NewRow());
dt.Rows[0]["Message"] = "Hello World";

using (StringWriter sw = new StringWriter())
{
dt.WriteXml(sw, System.Data.XmlWriteMode.IgnoreSchema, false);

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(sw.ToString()));
return ms;

//this fails for some reason
//using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(sw.ToString())))
// return ms;
}
}
}

这段代码给了我想要的结果(我对根标签不挑剔):

<DocumentElement>
<Test>
<Message>Hello World</Message>
</Test>
</DocumentElement>

最佳答案

我推荐使用 WCF Data Services去做这个。他们实现了 OData协议(protocol),这意味着它们旨在以一致且可移植的方式公开数据。可以对 JSON 或 XML 进行序列化。

示例:

  1. Beginner level .
  2. A more comprehensive explanation and sample.

关于c# - WCF Restful Webservice 将数据表序列化为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com