使用StringWriter进行XML序列化

使用StringWriter进行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());

读完这个问题之后我问自己,为什么不使用StringWriter?看起来容易得多。

XmlSerializer ser = new XmlSerializer(typeof(MyObject));StringWriter writer = new StringWriter();ser.Serialize(writer, myObject);serializedValue = writer.ToString();

另一个问题是,第一个示例生成的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/>

我从XmlTextWriter中获取了字符串,然后将xml放在那里。这个没有用(手动插入DB)。

之后我尝试使用encoding =“utf-16”手动插入(只是编写INSERT INTO ...),这也失败了。删除编码完全有效。在那个结果之后我切换回StringWriter代码并且瞧 - 它工作了。

问题:我真的不明白为什么。

在Christian Hayter:通过这些测试,我不确定我是否必须使用utf-16来写入数据库。不会将编码设置为UTF-16(在xml标签中)吗?


波斯汪
浏览 877回答 3
3回答

蛊毒传说

一个问题StringWriter是,默认情况下,它不允许您设置它所宣传的编码&nbsp;- 因此您最终可以使用XML文档将其编码通告为UTF-16,这意味着如果您需要将其编码为UTF-16把它写到文件中。我有一个小班来帮忙解决这个问题:public&nbsp;sealed&nbsp;class&nbsp;StringWriterWithEncoding&nbsp;:&nbsp;StringWriter{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;Encoding&nbsp;Encoding&nbsp;{&nbsp;get;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;StringWriterWithEncoding&nbsp;(Encoding&nbsp;encoding) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encoding&nbsp;=&nbsp;encoding; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}或者如果你只需要UTF-8(这是我经常需要的):public&nbsp;sealed&nbsp;class&nbsp;Utf8StringWriter&nbsp;:&nbsp;StringWriter{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;Encoding&nbsp;Encoding&nbsp;=>&nbsp;Encoding.UTF8;}至于为何无法将XML保存到数据库中 - 如果您希望我们能够诊断/修复它,您必须向我们提供有关您尝试时发生的事情的更多详细信息。
打开App,查看更多内容
随时随地看视频慕课网APP