在实例化对象并使用XmlSerializer进行序列化之后,我将类型定义为Example,如下所示,我得到的是x003A而不是冒号:
这是我的代码:
public class Example
{
[XmlElement("Node1")]
public string Node1 { get; set; }
[XmlElement("rd:Node2")]
public string Node2 { get; set; }
}
序列化代码
Example example = new Example { Node1 = "value1", Node2 = "value2" };
XmlSerializerNamespaces namespaceSerializer = new XmlSerializerNamespaces();
namespaceSerializer.Add("rd", @"http://schemas.microsoft.com/sqlServer/reporting/reportdesigner");
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Example));
string path = System.Windows.Forms.Application.StartupPath + "//example.xml";
using (StreamWriter writer = new StreamWriter(path))
{
serializer.Serialize(writer, example, namespaceSerializer);
}
预期结果
<?xml version="1.0" encoding="utf-8"?>
<Example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Node1>value1</Node1>
<rd:Node2>value2</rd:Node2>
</Example>
实际结果:
<?xml version="1.0" encoding="utf-8"?>
<Example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Node1>value1</Node1>
<rd_x003A_Node2>value2</rd_x003A_Node2>
</Example>
在这方面的任何帮助和指导都将不胜感激.提前致谢!
解决方法:
您必须这样做:
public class Example {
[XmlElement("Node1")]
public string Node1 { get; set; }
// define namespace like this, not with a prefix
[XmlElement("Node2", Namespace = "http://schemas.microsoft.com/sqlServer/reporting/reportdesigner")]
public string Node2 { get; set; }
}
然后在序列化时:
var serializer = new XmlSerializer(typeof(Example));
var ns = new XmlSerializerNamespaces();
// map prefix to namespace like this
ns.Add("rd", "http://schemas.microsoft.com/sqlServer/reporting/reportdesigner");
var ms = new MemoryStream();
// use namespaces while serializing
serializer.Serialize(ms, new Example {
Node1 = "node1",
Node2 = "node2"
}, ns);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。