加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用.NET控制xml序列化的<?xml?>部分?

发布时间:2020-12-16 07:53:01 所属栏目:百科 来源:网络整理
导读:我正在使用这个方法序列化我的对象: public static string XmlSerialize(object o){ var stringWriter = new StringWriter(); var xmlSerializer = new XmlSerializer(o.GetType()); xmlSerializer.Serialize(stringWriter,o); string xml = stringWriter.T
我正在使用这个方法序列化我的对象:
public static string XmlSerialize(object o)
{
    var stringWriter = new StringWriter();
    var xmlSerializer = new XmlSerializer(o.GetType());
    xmlSerializer.Serialize(stringWriter,o);
    string xml = stringWriter.ToString();
    stringWriter.Close();
    return xml;
}

它使XML开始像这样:

<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

但我希望它看起来像这样:

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

那么,如何将编码更改为Windows-1252并设置standalone = yes?
另外,如何获取对象来排除xmlns值?

我看过几个类似的问题,比如this one,但是我希望对我来说可能比较简单,也许是在某个地方设置一些属性?

更新2:在看了约翰的回答和评论之后,再想一想,我决定再做一个方法.我不认为在某种程度上为第三方创建这个古怪的自定义xml应该被称为“XmlSerialize”的通用名称.

所以,我创建了一个第二个方法,它接受一个XML文档,首先删除一个这样的命名空间元素:

xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();

那么它就用John的代码将其写入XML.最后它返回xml,遵循以下输出:

new XDeclaration("1.0","Windows-1252","yes").ToString()

这很丑,但是它让我正是我需要这个第三方来理解我的XML.

尝试这个:
public static string XmlSerialize(object o)
{
    using (var stringWriter = new StringWriter())
    {
        var settings = new XmlWriterSettings
                           {
                               Encoding = Encoding.GetEncoding(1252),OmitXmlDeclaration = true
                           };
        using (var writer = XmlWriter.Create(stringWriter,settings))
        {
            var xmlSerializer = new XmlSerializer(o.GetType());
            xmlSerializer.Serialize(writer,o);
        }
        return stringWriter.ToString();
    }
}

这不会摆脱xsd:命名空间,但是,为什么要这样?

更新:似乎每当你使用StringWriter,你都可以得到UTF-16,即使你使用一个XmlWriter,它与编码集合.下一步是写入MemoryStream.但是这提出了为什么要返回一个字符串的问题.例如,如果要转过来将字符串输出到流,那么我们应该直接输出到这个流.相同的TextWriter.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读