C# XML文档(2,2)中存在错误。这意味着什么?
我正在尝试阅读XML文档。 我的XML: 我在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标记不同。您是否
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; }
}