2011-03-15 85 views
1

我想使用xmlserializer更改xml命名空間。我瀏覽過網頁沒有結果。從串行我的結果是:c#XML序列化nonamespace使用列表

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

我的串行看起來是這樣的:

XmlSerializer s = new XmlSerializer(typeof(List<Resource>), new XmlRootAttribute("OLPData")); 
TextWriter t = new StreamWriter("code.xml"); 
List<Resource> xml = new List<Resource>() { general }s.Serialize(t, xml); 
t.Close(); 

,所以我有型的ressource的列表,一般爲源。我試圖補充一點:

public partial class Resource 
{ 
[XmlAttribute(AttributeName = "noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)] 
    public string attr = @"C:\Program Files\Dassault Systemes\B19\intel_a\startup\Olp\XSchemas\Upload.xsd"; 
} 

在XML類結構,但它顯然增加了noNamespaceSchemaLocation到的ressource代替舊數據。

<?xml version="1.0" encoding="utf-8"?> 
<OLPData mlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Resource xsi:noNamespaceSchemaLocation = "C:\Program Files\Dassault Systemes\B19\intel_a\startup\Olp\XSchemas\Upload.xsd"> 
</Resource> 
</OLPData> 

我想是這樣的結果:

<?xml version="1.0" encoding="utf-8"?> 
<OLPData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Program Files\Dassault Systemes\B19\intel_a\startup\Olp\XSchemas\Upload.xsd"> 
    <Resource> 
</Resource> 
</OLPDate> 

有什麼建議?

回答

2

我得到的第一個想法,它似乎正常工作:(修改每個評論

void Main() 
{ 
    var s = new XmlSerializer(typeof(OlpData)); 
    using (var t = new StreamWriter("code.xml")) 
    { 
     var xml = new OlpData { Resources = new[] { WriteGeneral() } }; 
     s.Serialize(t, xml); 
    } 
} 

[XmlRoot("OLPData")] 
public partial class OlpData 
{ 
    [XmlAttribute(AttributeName = "noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)] 
    public string attr = @"C:\Program Files\Dassault Systemes\B19\intel_a\startup\Olp\XSchemas\Upload.xsd"; 

    [XmlElement("Resource")] 
    public Resource[] Resources; 
} 

public partial class Resource 
{ 
} 
+0

我不能使用VAR XML =新OlpData {資源=新[] {新的資源() }}; – Thomas 2011-03-15 12:16:35

+0

@Thomas - 當然,只要做你需要的一切。根據您的要求使用'WriteGeneral'修改回答。 – Mormegil 2011-03-15 14:12:57

+0

WriteGeneral是一種返回一個名爲general的變量的方法,它是一個Resource類型。不知道你是否明白。而且它不是一個數組。 – Thomas 2011-03-15 14:34:08