我通常會搜索網頁的最高和最低的答案,但這次我畫了一個空白。我使用VS2005將代碼寫入POST xml到API。我有C#中的類設置,我序列化成一個XML文檔。這些類如下所示:在C#中序列化XML#
[Serializable]
[XmlRoot(Namespace = "", IsNullable = false)]
public class Request
{
public RequestIdentify Identify;
public string Method;
public string Params;
}
[Serializable]
public class RequestIdentify
{
public string StoreId;
public string Password;
}
當我序列化此我得到:
<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Identify>
<StoreId>00</StoreId>
<Password>removed for security</Password>
</Identify>
<Method>ProductExport</Method>
<Params />
</Request>
但API返回一個 「沒有XML派」 的錯誤。
如果我直接發送XML字符串中的爲:
string xml = @"<Request><Identify><StoreId>00</StoreId><Password>Removed for security</Password></Identify><Method>ProductExport</Method><Params /></Request>";
有效地發送該XML(而不在「請求」標籤模式的信息):
<Request>
<Identify>
<StoreId>00</StoreId>
<Password>Removed for security</Password>
</Identify>
<Method>ProductExport</Method>
<Params />
</Request>
這似乎認識XML沒有問題。
所以我想我的問題是如何將我的當前類更改爲序列化到XML並獲得XML在第二種情況下?我假設我需要另一個「父」類來包裝現有的和對這個「父母」或類似的東西使用InnerXml屬性,但我不知道如何做到這一點。
對這個問題抱歉,我只用了3個月的C#,而且我是一名實習教師,不得不在工作中自學!
哦和PS我不知道爲什麼,但VS2005真的不想讓我用私有變量設置這些類,然後使用公共等價物的getter和setter,所以我讓他們寫出它們現在的樣子。
在此先感謝:-)
UPDATE:
與大多數事情一樣也很難,如果你不知道你需要問什麼或如何詞它來尋找答案,而是:
一旦我知道要尋找什麼,我發現我所需要的答案:
刪除XML聲明:
XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;
StringWriter stringWriter = new StringWriter();
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, writerSettings))
{
serializer.Serialize(xmlWriter, request);
}
string xmlText = stringWriter.ToString();
拆卸/設置命名空間(由於上述答覆,幫助找到這一個!):
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
感謝您的幫助大家誰回答或向我指出了正確的方向!是的,一旦我知道我在問什麼,我確實找到要閱讀的文章:-)這是我第一次在3個月的時間裏自我教導,因此我認爲自己做得很好...
的可能的複製[XmlSerializer的:除去不必要的xsi和xsd命名空間(http://stackoverflow.com/questions/760262/xmlserializer-remove-unnecessary-xsi-and-xsd-namespaces) – J0HN
不是解決方案,但您可以嘗試通過用空字符串替換命名空間屬性來操縱字符串xml。 –
請顯示如何序列化您的課程。我猜你需要'XmlSerializerNamespaces _namespaces = new XmlSerializerNamespaces(new [] {XmlQualifiedName.Empty}); serializer.Serialize(writer,data,_namespaces);' – Reniuz