XML 文档 (2, 2) 中有错误。这是什么意思?
There is an error in XML document (2, 2).What does this mean?
我正在尝试阅读 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>
。
更新 :
我的内部异常:
无法序列化 'Microsoft.Xna.Framework.Graphics.Texture2D'
类型的成员 'MyRPGgame.SplashScreen._image'
这通常意味着文件开头有空格;检查 <?xml...
之前的换行符。更好的是:请显示在二进制编辑器中查看的文件的前几个字节(最好是 <SplashScreen
)。
它 可能 也意味着你在 <SplashScreen
之前的某处有一个不可见的 unicode 或控制字符
我的经验是,在第 2 个字符的第 2 行中,有一个错误。
查看您的 class 名称是否与 XML 标签不同。您是否可以将 "XML Root name" 更改为另一个。
查看 XML 结构,class 序列化到哪个节点。
在我的例子中,似乎 Visual Studio 2017 版本 15.5 更新之一在尝试打开 SSRS 项目时导致了此错误。解决办法是把工程文件夹中的*.rptproj.rsuser文件删掉再试。
在我的例子中,带有 [XmlArrayAttribute]
的 属性 getter 访问了带有 [XmlIgnoreAttribute]
的未初始化字段。
试试这个:当你将 XML 反序列化为 List 时,只需添加一个额外的
行到开头,即 ArrayOfAddressDirectory
如下,不要在文件的开头和结尾放置任何 space。
<?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);
}
}
}
你的问题肯定是 Type 和模板 T 之间的混淆。你正在尝试使用 Type --> new XmlSerializer(Type) 构造 Serializer,然后使用模板 T ----> (T) 反序列化xml.Deserialize。所以解决方案是将构造中的Type替换为typeof(T),这样应该可以消除(2, 2).
的初始XML文档问题
只是想分享对我有用的东西。我有一个类似的错误
System.InvalidOperationException: There is an error in XML document (1, 40).
---> System.InvalidOperationException: <tsResponse xmlns='http://xxxyyyzzzz.com/api'>
was not expected.
我试图将字符串反序列化为 tsResponse
类型的对象。
将以下属性 [Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
添加到 class tsResponse
后,我能够解决我的问题。
[Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
public class tsResponse
{
[XmlElement]
public CredentialsXml credentials { get; set; }
}
我必须添加命名空间属性 (System.Xml.Serialization)。
我正在尝试阅读 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>
。
更新 :
我的内部异常:
无法序列化 'Microsoft.Xna.Framework.Graphics.Texture2D'
'MyRPGgame.SplashScreen._image'
这通常意味着文件开头有空格;检查 <?xml...
之前的换行符。更好的是:请显示在二进制编辑器中查看的文件的前几个字节(最好是 <SplashScreen
)。
它 可能 也意味着你在 <SplashScreen
我的经验是,在第 2 个字符的第 2 行中,有一个错误。 查看您的 class 名称是否与 XML 标签不同。您是否可以将 "XML Root name" 更改为另一个。
查看 XML 结构,class 序列化到哪个节点。
在我的例子中,似乎 Visual Studio 2017 版本 15.5 更新之一在尝试打开 SSRS 项目时导致了此错误。解决办法是把工程文件夹中的*.rptproj.rsuser文件删掉再试。
在我的例子中,带有 [XmlArrayAttribute]
的 属性 getter 访问了带有 [XmlIgnoreAttribute]
的未初始化字段。
试试这个:当你将 XML 反序列化为 List 时,只需添加一个额外的
行到开头,即 ArrayOfAddressDirectory
如下,不要在文件的开头和结尾放置任何 space。
<?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);
}
}
}
你的问题肯定是 Type 和模板 T 之间的混淆。你正在尝试使用 Type --> new XmlSerializer(Type) 构造 Serializer,然后使用模板 T ----> (T) 反序列化xml.Deserialize。所以解决方案是将构造中的Type替换为typeof(T),这样应该可以消除(2, 2).
的初始XML文档问题只是想分享对我有用的东西。我有一个类似的错误
System.InvalidOperationException: There is an error in XML document (1, 40). ---> System.InvalidOperationException:
<tsResponse xmlns='http://xxxyyyzzzz.com/api'>
was not expected.
我试图将字符串反序列化为 tsResponse
类型的对象。
将以下属性 [Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
添加到 class tsResponse
后,我能够解决我的问题。
[Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
public class tsResponse
{
[XmlElement]
public CredentialsXml credentials { get; set; }
}
我必须添加命名空间属性 (System.Xml.Serialization)。