【问题标题】:XML Serialization with .NET使用 .NET 进行 XML 序列化
【发布时间】:2010-08-08 10:38:34
【问题描述】:

我正在尝试使用带有以下代码的 C# 将对象序列化为 XML:

            memoryStream = new System.IO.MemoryStream();
            Serializer.Serialize(memoryStream, this);
            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            streamReader = new System.IO.StreamReader(memoryStream);
            return streamReader.ReadToEnd();

我的问题是这会在文档的一部分中产生以下输出:

<?xml version="1.0"?>

我想要以下:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

有人知道如何同时包含“编码”和“独立”属性吗?

我看到了this,但它似乎没有产生我需要的输出。

谢谢!

【问题讨论】:

标签: .net xml serialization


【解决方案1】:

尝试关注

MyClass instance = new MyClass ();
// fill instance 

XmlSerializer serializer = new XmlSerializer (typeof (MyClass));
XmlWriterSettings settings = new XmlWriterSettings ();
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.UTF8;
// next two settings are optional
settings.Indent = true;
settings.IndentChars = "    ";

using (XmlWriter writer = XmlWriter.Create ("test.xml", settings)) {
    writer.WriteRaw ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
    serializer.Serialize (writer, instance);
}

已更新:顺便说一句,如果你不想拥有

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"

作为 XML 文件中根元素的属性并且完全没有命名空间,您可以使用 [XmlRoot(Namespace="")] 作为 calss MyClass 的属性并替换行

serializer.Serialize (writer, instance);

用线条

XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces ();
namespaces.Add (string.Empty, string.Empty);
serializer.Serialize (writer, instance, namespaces);

【讨论】:

  • 供参考settings.IndentChars = "\t"; 也可以使用(每个缩进等于一个制表符)
  • @maxp:是的,我知道,但我更喜欢使用空格而不是制表符创建 XML 文件。如果我也在任何文本编辑器中创建 XML 文件,我也会这样做。所以这只是口味的问题。
【解决方案2】:

这是否标记为可序列化?如果是,您是否拥有想要公开的属性?也许您还应该发布您的(this)来源

这是一个很好的起点:LINK

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多