在C#中序列化XML

时间:2012-06-26 12:52:08

标签: c# xml serialization

我经常在网上搜索我的答案,但这次我画的是空白。我正在使用VS2005将代码写入POST xml到API。我在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返回“No XML sent”错误。

如果我将xml直接发送到字符串中:

string xml = @"<Request><Identify><StoreId>00</StoreId><Password>Removed for security</Password></Identify><Method>ProductExport</Method><Params /></Request>";

有效发送此xml(没有“Request”标记中的架构信息):

<Request>
   <Identify>
      <StoreId>00</StoreId>
      <Password>Removed for security</Password>
   </Identify>
   <Method>ProductExport</Method>
   <Params />
</Request>

似乎认识到XML没有问题。

所以我的问题是,我想如何将当前的类更改为Serialize into XML并获取XML,如第二种情况?我假设我需要另一个“父”类来包装现有的类并在这个“父”或类似的东西上使用InnerXml属性,但我不知道如何做到这一点。

对于这个问题道歉,我只使用C#3个月,而且我是一名需要在工作中自学的实习开发人员!

哦和PS我不知道为什么,但是VS2005真的不想让我用私有变量设置这些类,然后在公共等价物上使用getter和setter,所以我现在就写下它们的用法。

提前致谢: - )

更新:

与大多数事情一样,如果你不确定你需要问什么或者如何说出来,那么很难找到答案:

一旦我知道要寻找什么,我找到了我需要的答案:

删除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个月的时间里自学,所以我觉得我做得很好......

1 个答案:

答案 0 :(得分:0)

来自Rydal的博客:

  

默认情况下,XmlDocument对象将一个名称空间分配给XML字符串,并将声明作为XML文档的第一行包含在内。我绝对不需要或使用它们,因此,我需要删除它们。以下是你如何做到这一点。

Removing declaration and namespaces from XML serialization