为了账号安全,请及时绑定邮箱和手机立即绑定

使用StringWriter进行XML序列化

使用StringWriter进行XML序列化

波斯汪 2019-08-16 16:14:18
使用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标签中)吗?
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

一个问题StringWriter是,默认情况下,它不允许您设置它所宣传的编码 - 因此您最终可以使用XML文档将其编码通告为UTF-16,这意味着如果您需要将其编码为UTF-16把它写到文件中。我有一个小班来帮忙解决这个问题:

public sealed class StringWriterWithEncoding : StringWriter{
    public override Encoding Encoding { get; }

    public StringWriterWithEncoding (Encoding encoding)
    {
        Encoding = encoding;
    }    }

或者如果你只需要UTF-8(这是我经常需要的):

public sealed class Utf8StringWriter : StringWriter{
    public override Encoding Encoding => Encoding.UTF8;}

至于为何无法将XML保存到数据库中 - 如果您希望我们能够诊断/修复它,您必须向我们提供有关您尝试时发生的事情的更多详细信息。


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 876 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信