我有一个需要返回XML字符串的WCF服务.但似乎作者只想建立一个文件而不是字符串.我试过了:
string nextXMLstring = "";
using (XmlWriter writer = XmlWriter.Create(nextXMLstring))
Run Code Online (Sandbox Code Playgroud)
这会产生一个错误,说明nextXMLstring没有文件路径.它需要类似的东西:
using (XmlWriter writer = XmlWriter.Create("nextXMLstring.xml"))
Run Code Online (Sandbox Code Playgroud)
如何构建我的XML然后将其作为字符串返回?
谢谢!!
我正在寻找一种简单的方法来序列化对象(在C#3中).
我用Google搜索了一些例子,并得出了类似的结果:
MemoryStream memoryStream = new MemoryStream ( );
XmlSerializer xs = new XmlSerializer ( typeof ( MyObject) );
XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );
xs.Serialize ( xmlTextWriter, myObject);
string result = Encoding.UTF8.GetString(memoryStream .ToArray());
Run Code Online (Sandbox Code Playgroud)
读完这个问题之后我问自己,为什么不使用StringWriter?看起来容易得多.
XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();
Run Code Online (Sandbox Code Playgroud)
另一个问题是,第一个示例生成的XML我不能只写入SQL Server 2005 DB的XML列.
第一个问题是:在我之后需要它作为字符串时,是否有理由不使用StringWriter序列化Object?在google搜索时,我从未找到使用StringWriter的结果.
第二个当然是:如果你不应该使用StringWriter(无论出于何种原因),这将是一个好的和正确的方法?
加成:
正如两个答案已经提到的那样,我将进一步讨论XML到DB的问题.
写入数据库时,我得到以下异常:
System.Data.SqlClient.SqlException:XML解析:第1行,字符38,无法切换编码
对于字符串
<?xml version="1.0" encoding="utf-8"?><test/>
Run Code Online (Sandbox Code Playgroud)
我从XmlTextWriter中获取了字符串,然后将xml放在那里.这个没有用(手动插入DB).
之后我尝试使用encoding ="utf-16"手动插入(只是编写INSERT INTO ...),这也失败了.删除编码完全有效.在那个结果之后我切换回StringWriter代码并且瞧 - 它工作了.
问题:我真的不明白为什么.
在Christian Hayter:通过这些测试,我不确定我是否必须使用utf-16来写入数据库.不会将编码设置为UTF-16(在xml标签中)吗?