C# XML文档(2,2)中存在错误。这意味着什么?

C# XML文档(2,2)中存在错误。这意味着什么?,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我正在尝试阅读XML文档。 我的XML: 我在instance=(T)xml.Deserialize(textreader)上遇到错误我的XML文档错了吗?我正在读。 更新: 我的内部例外: 无法序列化Microsoft.Xna.Framework.Graphics.Texture2D类型的成员'MyRPGgame.SplashScreen.\u image',,这通常意味着文件开头有空格;在之前检查换行符我的经验是,在第二个字符的第二行中,有一个错误。 看看您的类名是否与XML标记不同。您是否

我正在尝试阅读XML文档。 我的XML:

我在
instance=(T)xml.Deserialize(textreader)上遇到错误我的XML文档错了吗?我正在读
。 更新: 我的内部例外:
无法序列化Microsoft.Xna.Framework.Graphics.Texture2D类型的成员
'MyRPGgame.SplashScreen.\u image'
,这通常意味着文件开头有空格;在
之前检查换行符我的经验是,在第二个字符的第二行中,有一个错误。
看看您的类名是否与XML标记不同。您是否正在将“XML根名称”更改为其他名称

看一看XML结构和序列化到哪个节点的类

另外,请阅读
.

在我的例子中,似乎是Visual Studio 2017 15.5版的某个更新在尝试打开SSRS项目时导致了此错误。解决方案是从项目文件夹中删除*.rptproj.rsuser文件,然后重试。

在我的例子中,具有
[XmlArrayAttribute]
的属性让getter访问未初始化的
[XmlIgnoreAttribute]
字段。

尝试以下操作:在将XML反序列化到列表时,只需添加一个额外的属性 行的开头,即
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>

多尼女士
48
印度
以下是C#代码:

名称空间XmlReadProgram
{
公共类地址目录
{
公共字符串所有者{get;set;}
公共字符串年龄{get;set;}
公共字符串公司{get;set;}
}
公共课程
{
静态void Main(字符串[]参数)
{
List adlist=新列表();
使用(FileStream FileStream=File.OpenRead(@“E:\inputDirectory\address.xml”))
{
XmlSerializer serializer=新的XmlSerializer(typeof(List));
adlist=(List)序列化程序。反序列化(fileStream);
}
//您可以使用foreach打印所有数据
Console.WriteLine(adlist[0].Owner);
Console.WriteLine(adlist[0].Age);
Console.WriteLine(adlist[0].Company);
}
}
}

您案例中的问题肯定是类型和模板T之间的混淆。您正在尝试使用类型-->新建XmlSerializer(类型)构造序列化程序,然后使用模板T-->(T)xml.deserialize反序列化。因此,解决方案是用typeof(T)替换构造中的Type,这将消除(2,2)最初的XML文档问题。

只是想分享对我有用的东西。我也犯了类似的错误

System.InvalidOperationException:XML文档(1,40)中存在错误。 --->System.InvalidOperationException:
不是预期的

我试图将字符串反序列化为
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)。

我认为(2,2)表示错误在第2行第2列。但是XML文档看起来还可以。您确定没有加载其他内容吗?不仅仅是此xml文档…添加一行代码(textreader.ReadToEnd())以将文本读取器的输出放入字符串中,并使用调试器对其进行检查。(作为正常检查)。问题是您实例化了
GameScreen
类型的
XmlManager
,但试图加载包含
SplashScreen
类型的XML文件。大概我不确定,因为我不理解代码中
T
Type
之间的语义差异。也许展示这两种额外的类型会有所帮助。如果
SplashScreen
GameScreen
的子类,则此代码适用于我。是的,SplashScreen是GameScreen的子类。根据我的经验,此错误意味着根元素的标记名超出预期。实际的标记名从第2行字符2开始。请尝试删除任何
*。suo
文件我没有rsuser文件,因为项目来自TFS。因此,我创建了一个新的SSRS项目,发现了它与我无法打开的项目(只是XML名称空间)之间的差异,更改了我无法打开的项目,然后打开了该项目。我尝试按照这个答案删除一些文件。一个对我有效的解决方法是创建一个新的SSRS项目,然后添加所有现有元素。我删除了*.rptproj.ruser和*.rptproj.user,这为我解决了这个问题。我遇到了与@user875318相同的问题,试图在Visual Studio 2017版本15.5.7中打开SSRS解决方案。我遇到了相同的问题,当时我试图(错误地)从VS2015而不是VS2017中打开解决方案。我删除了.sln文件并加载了项目。sln文件中似乎存在编码错误。
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; 
}
<?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>
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);
        }
    }
}
[Serializable, XmlRoot(ElementName = "tsResponse", Namespace = "http://xxxyyyzzzz.com/api")]
public class tsResponse
{
    [XmlElement]
    public CredentialsXml credentials { get; set; }
}