我正在尝试阅读XML文档。 我的XML:
<?xml version="1.0" encoding="utf-8"?>
<SplashScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Path>SplashScreen/Image-King</Path>
</SplashScreen>
我正在阅读XML的代码:
XmlGameScreen = new XmlManager<GameScreen>();
XmlGameScreen.Type = currentscreen.Type;
currentscreen = XmlGameScreen.Load("LoadXML/SplashScreen.xml");
和
public Type Type;
public T Load(string path)
{
T instance;
using (TextReader textreader = new StreamReader(path))
{
XmlSerializer xml = new XmlSerializer(Type);
instance = (T)xml.Deserialize(textreader);
}
return instance;
}
我在instance = (T)xml.Deserialize(textreader);
收到错误我的XML文档错了吗?我正在尝试阅读<Path>
。
更新:
我的内部例外:
无法序列化'MyRPGgame.SplashScreen._image'
'Microsoft.Xna.Framework.Graphics.Texture2D'
答案 0 :(得分:23)
在我的情况下,当尝试打开SSRS项目时,Visual Studio 2017版本15.5更新之一出现此错误。解决方案是从项目文件夹中删除* .rptproj.rsuser文件,然后重试。
答案 1 :(得分:4)
我的经验是,在第二个字符的第二行,有一个错误。 看看你的类名是否与XML标签不同。你可能正在改变&#34; XML Root名称&#34;另一个。
查看XML结构以及您将哪个类序列化到哪个节点。
答案 2 :(得分:3)
这通常意味着你在文件的开头有空格;检查<?xml...
之前的换行符。更好的是:请在二进制编辑器中查看文件的前几个字节(最好是<SplashScreen
)。
它可以也意味着你在<SplashScreen
答案 3 :(得分:0)
在我的情况下,具有[XmlArrayAttribute]
的属性使吸气剂访问的[XmlIgnoreAttribute]
字段未初始化。
答案 4 :(得分:0)
尝试一下:将XML反序列化为List时,只需添加一个额外的
如下所示,以ArrayOfAddressDirectory
开头,并且不要在文件的开头和结尾放置任何空格。
<?xml version="1.0"?>
<ArrayOfAddressDirectory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<AddressDirectory>
<Owner>MS. Dhoni</Owner>
<Age>48</Age>
<Company>India</Company>
</AddressDirectory>
</ArrayOfAddressDirectory>
这是C#代码:
namespace XmlReadProgram
{
public class AddressDirectory
{
public string Owner { get; set; }
public string Age { get; set; }
public string Company { get; set; }
}
public class Program
{
static void Main(string[] args)
{
List<AddressDirectory> adlist = new List<AddressDirectory>();
using (FileStream fileStream = File.OpenRead(@"E:\inputDirectory\address.xml"))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<AddressDirectory>));
adlist = (List<AddressDirectory>)serializer.Deserialize(fileStream);
}
//You can use foreach to print all data
Console.WriteLine(adlist[0].Owner);
Console.WriteLine(adlist[0].Age);
Console.WriteLine(adlist[0].Company);
}
}
}
答案 5 :(得分:0)
在您的情况下,问题肯定是 Type 和模板 T 之间的混淆。您正在尝试使用 Type --> new XmlSerializer(Type) 构造 Serializer,然后使用模板 T ----> (T)xml 反序列化。反序列化。所以解决方案是用typeof(T)代替构造中的Type,这样应该可以消除(2, 2)的初始XML文档问题。
答案 6 :(得分:0)
只是想分享对我有用的东西。我有类似的错误
<块引用>System.InvalidOperationException: XML 文档中存在错误 (1, 40)。
---> System.InvalidOperationException: <tsResponse xmlns='http://xxxyyyzzzz.com/api'>
不是预期的。
我试图将字符串反序列化为 tsResponse
类型的对象。
将以下属性 [Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
添加到类 tsResponse
后,我能够解决我的问题。
[Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
public class tsResponse
{
[XmlElement]
public CredentialsXml credentials { get; set; }
}
我必须添加命名空间属性(System.Xml.Serialization)。