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

Joh*_*ohn 9 c# xml asp.net-mvc xml-serialization

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

StringWriter sw = new StringWriter();
XmlSerializer s = new XmlSerializer(typeof(mytype));
s.Serialize(sw, myData);
Run Code Online (Sandbox Code Playgroud)

现在这给我这个前两行;

<?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">
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Joh*_*ohn 8

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

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

并在我调用serialize时将其添加到我的代码中以添加命名空间

    XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces();
    ns1.Add("", "http://myurl.com/api/v1.0");
    xs.Serialize(xmlTextWriter, FormData, ns1);
Run Code Online (Sandbox Code Playgroud)

只要两个命名空间匹配,它就能很好地工作.


mar*_*c_s 6

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

XmlSerializer s = new XmlSerializer(typeof(mytype), "http://yourdefault.com/");
Run Code Online (Sandbox Code Playgroud)

要设置编码,我建议您使用XmlTextWriter而不是直接StringWriter创建它,如下所示:

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

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

s.Serialize(xtw, myData);
Run Code Online (Sandbox Code Playgroud)

XmlWriterSettings,您可以定义过多的选项 - 包括编码.