我目前正在寻找一种简单的方法来序列化对象(在 C # 3中)。
我在谷歌上搜索了一些例子,结果是这样的:
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 不能写入 SQLServer2005DB 的 XML 列。
第一个问题是: 当事后需要一个 Object 作为字符串时,我为什么不应该使用 StringWriter 来序列化它?我在谷歌搜索时从未发现过使用 StringWriter 的结果。
当然,第二个问题是: 如果您不应该使用 StringWriter (不管是出于什么原因) ,那么使用哪种方法是好的、正确的呢?
附加:
正如两个答案都已经提到的,我将进一步讨论 XML 到 DB 的问题。
在写入数据库时,我得到了以下异常:
System.Data.SqlClient.SqlException: XML 解析: 第1行,字符38, 无法切换编码
为了绳子
<?xml version="1.0" encoding="utf-8"?><test/>
我获取了从 XmlTextWriter 创建的字符串,并将其作为 xml 放在那里。这个方法不起作用(手动插入数据库也不起作用)。
之后,我尝试了手动插入(只是编写 INSERT INTO...) ,编码为 = “ utf-16”,但也失败了。 删除编码完全起作用了。在得到这个结果之后,我切换回 StringWriter 代码,瞧——它工作了。
问题: 我真的不明白为什么。
在 Christian Hayter: 通过这些测试,我不确定我必须使用 utf-16来写数据库。那么,将编码设置为 UTF-16(在 xml 标记中)不就行了吗?