为什么有两种相同类型的xmls,一种不是反序列化,另一种是?
假设我有一个相同的装配两种不同的XML文件作为嵌入资源:为什么有两种相同类型的xmls,一种不是反序列化,另一种是?
Hummer.xml
<?xml version="1.0" encoding="utf-8" ?>
<car company="GMC" brand="Hummer" />
HammerHead.xml
<?xml version="1.0" encoding="utf-8" ?>
<shark species="HammerHead" length="45" />
Car.cs 使用系统; using System.Collections.Generic; using System.Text; using System.Xml.Serialization;使用系统
namespace XmlDeserialization_Test
{
[XmlRoot("car"), XmlType("car")]
public class Car
{
[XmlAttribute("company")]
public string Company { get; set; }
[XmlAttribute("brand")]
public string Brand { get; set; }
}
}
Shark.cs ; using System.Collections.Generic; using System.Text; using System.Xml.Serialization;
namespace XmlDeserialization_Test
{
[XmlRoot("shark"), XmlType("shark")]
public class Shark
{
[XmlAttribute("species")]
public string Species { get; set; }
[XmlAttribute("length")]
public double Length { get; set; }
}
}
Program.cs的
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using System.Xml.Serialization;
namespace XmlDeserialization_Test
{
class Program
{
static void Main(string[] args)
{
List<Car> carList = new List<Car>();
List<Shark> sharkList = new List<Shark>();
Assembly assembly = Assembly.LoadFrom("XmlDeserialization_Test.exe");
string[] manifestResourceNames = assembly.GetManifestResourceNames();
Array.Sort<string>(manifestResourceNames);
foreach (string mrn in manifestResourceNames)
{
Stream stream = assembly.GetManifestResourceStream(mrn);
XmlSerializer serializer = new XmlSerializer(typeof(Shark));
object obj = serializer.Deserialize(stream);
if (obj is Car)
{
carList.Add((Car)obj);
}
else if (obj is Shark)
{
sharkList.Add((Shark)obj);
}
}
}
}
}
锤头 - 鲨鱼是完全反序列化。
但是,悍马 - 车不是。正在生成以下异常:
There is an error in XML document (2, 2).
"<car xmlns=''> was not expected."
如果鲨鱼被反序列化,为什么车是不是?如果汽车发生异常,为什么鲨鱼不是?
我无能为力!
您正试图用'鲨鱼'对'car'对象进行desearilize反序列化。如果您更改为创建Car类型的解串器,则会产生相反的结果:
XmlSerializer serializer = new XmlSerializer(typeof(Car));
我不知道你是如何序列化,但这应该给你一个想法。
是的你是对的。但如何解决这个问题,同时达到预期的效果?我没有序列化。试图从两个不同的xml文本文件中反序列化。 – anonymous 2012-01-06 19:36:55
只需用'XmlSerializer(typeof(Shark))'反序列化鲨鱼,然后使用'XmlSerializer(typeof(Car))'反序列化汽车。 – 2012-01-06 20:06:05
如果您知道资源名称,您可以检查“mrn”的值并基于此建立适当的desiarilizer。 – 2012-01-06 20:13:20
从错误,它看起来像您的资源中的XML是不一样的,你在这里发布。它抱怨不在您发布的文档中的内容。 – 2012-01-06 19:30:48
哪个xml悍马或HammerHead? – anonymous 2012-01-06 19:31:34
悍马。看起来它抱怨以下内容:。这不在您发布的XML文档中。 –
2012-01-06 19:32:15