我正在将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和编码类型?
由于
答案 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>