2011-05-06 111 views
-1
  StringBuilder sb = new StringBuilder(); 
      XmlWriter writer = XmlWriter.Create(sb); 
      XmlSerializer serializer = new XmlSerializer(typeof(OpenShipments)); 
      var ns = new XmlSerializerNamespaces(); 
      ns.Add("x-schema:", @"x-schema:C:\UPSLabel\OpenShipments.xdr"); 
      serializer.Serialize(writer, OS, ns); 
      xmlString = sb.ToString(); 

獲取錯誤對象引用未找到,因爲我以編程方式添加了命名空間。 基本上在我的XML命名空間將類似於下一個如何在xml序列化時添加名稱空間

<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr"> 

在這裏,我添加行ns.Add("x-schema:", @"x-schema:C:\UPSLabel\OpenShipments.xdr");

和上面的一行我得到錯誤....什麼是我的錯誤。只是無法弄清楚。請幫助我構建命名空間。

+1

你得到什麼錯誤? – Oded 2011-05-06 06:16:02

回答

2

嘗試這樣的:

var sb = new StringBuilder(); 
var myns = @"x-schema:C:\UPSLabel\OpenShipments.xdr"; 
using (var writer = XmlWriter.Create(sb)) 
{ 
    var serializer = new XmlSerializer(typeof(OpenShipments), myns); 
    var ns = new XmlSerializerNamespaces(); 
    ns.Add(string.Empty, myns); 
    serializer.Serialize(writer, OS, ns); 
    xmlString = sb.ToString(); 
} 

將產生:

<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr"> 
    ... 
</OpenShipments> 
+0

謝謝....你的解決方案的作品。很棒:)。 – Mou 2011-05-06 06:49:04

+0

可以請你告訴我如何添加更多的命名空間。就像ns.Add(string.Empty,myns1); ns.Add(string.Empty,myns2); 這有用嗎? – Mou 2011-05-06 06:50:31

0

線:

ns.Add("x-schema:", @"x-schema:C:\UPSLabel\OpenShipments.xdr"); 

被添加別名,即允許串行器使用x-schema:的XML內部。但是,這並不會使您的對象使用此名稱空間;對於這一點,你需要(在你的類型):

[XmlRoot([email protected]"x-schema:C:\UPSLabel\OpenShipments.xdr")] 
public class OpenShipments {...} 

(或東西等效,可能使用XmlAttributeOverrides

注意與別名添加,您將獲得:

<x-schema:OpenShipments xmlns:x-schema="x-schema:C:\UPSLabel\OpenShipments.xdr" /> 

要得到它沒有別名,你想:

ns.Add("", @"x-schema:C:\UPSLabel\OpenShipments.xdr"); 

這使輸出:

<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr" /> 
相關問題