Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象到XML之间的C#序列化_C#_Xml_Serialization - Fatal编程技术网

对象到XML之间的C#序列化

对象到XML之间的C#序列化,c#,xml,serialization,C#,Xml,Serialization,这是我第一次尝试序列化XML,我需要了解代码中出现错误的原因: private void函数(Object2输入参数) { XmlSerializerNamespaces ns=新的XmlSerializerNamespaces(); 加上(“,”); XmlSerializer s=新的XmlSerializer(typeof(Object1)); StringWriter XMLWriter=新的StringWriter(); s、 序列化(XMLWriter、InputParameters

这是我第一次尝试序列化XML,我需要了解代码中出现错误的原因:

private void函数(Object2输入参数)
{
XmlSerializerNamespaces ns=新的XmlSerializerNamespaces();
加上(“,”);
XmlSerializer s=新的XmlSerializer(typeof(Object1));
StringWriter XMLWriter=新的StringWriter();
s、 序列化(XMLWriter、InputParameters、ns);
XmlDocument DOC_Xml=新的XmlDocument();
DOC_Xml.LoadXml(XMLWriter.ToString());
}
内部异常:

{“无法将类型为'SRV.Entities.Object2'的对象转换为类型为'SRV.Entities.Object1'。”

堆栈跟踪:

System.Xml.Serialization.XmlSerializer.Serialization(XmlWriter XmlWriter,对象o,XmlSerializerNamespaces,字符串编码样式,字符串id)中的
(System.Xml.Serialization.XmlSerializer.Serialization(TextWriter TextWriter,对象o,XmlSerializerNamespaces命名空间)\r\n
错误行位于
s.Serialize(XMLWriter,ParametrosEntrada,ns)你们有一个bug

private void function(Object2 InputParameters)

你需要

XmlSerializer s = new XmlSerializer(typeof(Object2));
aka,您需要始终将“Object2”作为输入参数和“typeof”参数

更深入地说,你可以考虑泛型。所以你可以传递类型是。。。。根据需要。Object1或Object2。(但不是两者都有)

private void MyFunction(T输入参数)
{
XmlSerializerNamespaces ns=新的XmlSerializerNamespaces();
加上(“,”);
XmlSerializer s=新的XmlSerializer(typeof(T));
StringWriter XMLWriter=新的StringWriter();
s、 序列化(XMLWriter、InputParameters、ns);
XmlDocument DOC_Xml=新的XmlDocument();
DOC_Xml.LoadXml(XMLWriter.ToString());
}
您可以在以下SOF答案中看到更多信息:


Xml序列化要求序列化类和反序列化类相同,但有一些例外1)只查看公共变量2)对象类型必须相同。因此,当xml标记包含子项时,反序列化类中不能有字符串。能否共享一个演示此问题的示例?您的
InputParameters
对象可能不是
Object1
类型,但我们需要确认。如果是这样,您的问题不清楚您是否正在尝试序列化多态类型层次结构,其中
Object2
Object1
的子类。请参阅:帮助他人重现问题。。。如果你的问题是你写的代码,你应该包括一些。。。包含足够的代码以允许其他人重现问题。如果您只需要将对象转换为XML字符串,则可以使用。但是,直接序列化到
XmlDocument
而不使用中间
字符串
表示应该更有效。为此,请使用从到的
XmlNodeExtensions.AsXmlDocument()。
XmlSerializer s = new XmlSerializer(typeof(Object2));
private void MyFunction<T>(T InputParameters)
{

   XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
   ns.Add("", "");
   XmlSerializer s = new XmlSerializer(typeof(T));
   StringWriter XMLWriter = new StringWriter();
   s.Serialize(XMLWriter, InputParameters, ns);

   XmlDocument DOC_Xml = new XmlDocument();
   DOC_Xml.LoadXml(XMLWriter.ToString());
}