gpt4 book ai didi

c# - 使用 StringWriter 进行 XML 序列化

转载 作者:行者123 更新时间:2023-12-01 16:55:17 26 4
gpt4 key购买 nike

我目前正在寻找一种简单的方法来序列化对象(在 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());

读完这篇文章后question我问自己,为什么不使用 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 来序列化对象?我在谷歌搜索时从未找到使用 StringWriter 的结果。

当然,第二个是:如果您不应该使用 StringWriter 来执行此操作(无论出于何种原因),这将是一个好的且正确的方法?

<小时/>

添加:

正如两个答案已经提到的那样,我将进一步讨论 XML 到 DB 的问题。

写入数据库时​​出现以下异常:

System.Data.SqlClient.SqlException: XML parsing: line 1, character 38, unable to switch the encoding

对于字符串

<?xml version="1.0" encoding="utf-8"?><test/>

我获取了从 XmlTextWriter 创建的字符串,并将其作为 xml 放置在那里。这个不起作用(手动插入数据库也不起作用)。

后来我尝试使用encoding =“utf-16”手动插入(只是写INSERT INTO ...),但也失败了。然后删除编码就完全成功了。得到这个结果后,我切换回 StringWriter 代码,瞧 - 它成功了。

问题:我不太明白为什么。

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

最佳答案

StringWriter 的一个问题是默认情况下 it doesn't let you set the encoding which it advertises - 因此您最终可能会得到一个 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 保存到数据库 - 如果您希望我们能够诊断/修复它,您必须向我们提供有关您尝试时发生的情况的更多详细信息。

关于c# - 使用 StringWriter 进行 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com