2015-02-09 198 views
1
<?xml version="1.0" encoding="UTF-8"?> 
<rs:model-request xsi:schemaLocation="http://www.ca.com/spectrum/restful/schema/request ../../../xsd/Request.xsd " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rs="http://www.ca.com/spectrum/restful/schema/request" throttlesize="100"> 
<rs:target-models> 

我无法理解C#XmlSerializer。我已经成功地序列化了没有前缀的元素,如上面的rs:*。我也无法找到如何添加xsi:,xmlns:xsi和xmlns:rs(名称空间?)。带序列的XML序列化元素

有人能够创建一个简单的类来展示如何生成上述XML?

回答

2

为了序列化的目的,字段,属性和对象可以有一个与它们关联的名称空间。您指定使用属性,如命名空间[XmlRoot(...)],[的XmlElement(...)]和[XmlAttribute(...)]:

[XmlRoot(ElementName = "MyRoot", Namespace = MyElement.ElementNamespace)] 
public class MyElement 
{ 
    public const string ElementNamespace = "http://www.mynamespace.com"; 
    public const string SchemaInstanceNamespace = "http://www.w3.org/2001/XMLSchema-instance"; 

    [XmlAttribute("schemaLocation", Namespace = SchemaInstanceNamespace)] 
    public string SchemaLocation = "http://www.mynamespace.com/schema.xsd"; 

    public string Content { get; set; } 
} 

然后你想要的名称空间前缀关联通过使用XmlSerializerNamespaces序列化期间对象:

var obj = new MyElement() { Content = "testing" }; 
var namespaces = new XmlSerializerNamespaces(); 
namespaces.Add("xsi", MyElement.SchemaInstanceNamespace); 
namespaces.Add("myns", MyElement.ElementNamespace); 
var serializer = new XmlSerializer(typeof(MyElement)); 
using (var writer = File.CreateText("serialized.xml")) 
{ 
    serializer.Serialize(writer, obj, namespaces); 
} 

最终的输出文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<myns:MyRoot xmlns:myns="http://www.mynamespace.com" xsi:schemaLocation="http://www.mynamespace.com/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <myns:Content>testing</myns:Content> 
</myns:MyRoot> 
+0

我tryed这是好的,当你想要的前缀根,但我想添加一个前缀到t之下的其他节点他根。它已被添加到下一个节点 – dewelloper 2015-09-09 14:16:57