在c#中序列化对象时如何设置xmlns

时间:2010-04-02 15:08:15

标签: c# asp.net-mvc xml xml-serialization

我正在将ASP.net MVC程序中的对象序列化为像这样的xml字符串;

StringWriter sw = new StringWriter();
XmlSerializer s = new XmlSerializer(typeof(mytype));
s.Serialize(sw, myData);

现在这给我这个前两行;

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

我的问题是, 在序列化时如何更改xmlns和编码类型?

由于

3 个答案:

答案 0 :(得分:8)

我发现作品是将这一行添加到我的班级,

[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myurl.com/api/v1.0", IsNullable = true)]

并将其添加到我的代码中,以便在调用serialize

时添加命名空间
    XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces();
    ns1.Add("", "http://myurl.com/api/v1.0");
    xs.Serialize(xmlTextWriter, FormData, ns1);

只要两个命名空间匹配,它就可以正常工作。

答案 1 :(得分:6)

XmlSerializer类型在其构造函数中有第二个参数,它是默认的xml命名空间 - “xmlns:”命名空间:

XmlSerializer s = new XmlSerializer(typeof(mytype), "http://yourdefault.com/");

要设置编码,我建议您使用XmlTextWriter而不是直接StringWriter并创建如下内容:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;

XmlTextWriter xtw = XmlWriter.Create(filename, settings);

s.Serialize(xtw, myData);

XmlWriterSettings中,您可以定义大量选项 - 包括编码。

答案 2 :(得分:1)

查看.NET中的attributes that control XML serialization

具体来说,XmlTypeAttribute可能对您有用。如果您要更改XML文件的默认命名空间,XmlSerializer构造函数可以second parameter,您可以在其中定义。{/ p>