我通常在网上搜索我的答案,但这次我画的是空白。我正在使用 VS2005 编写代码以将 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 返回“未发送 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 属性,但我不知道该怎么做。
为这个问题道歉,我只使用 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 个月以来第一次陷入困境,所以我认为我做得很好......