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 序列化到哪个节点。

此外,请阅读 MSDN Documentation about the XmlRootAttribute 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)。