使用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标签中)吗?
蛊毒传说
相关分类