XML文档中存在错误(2,2)。这是什么意思?

时间:2015-01-12 15:59:23

标签: c# .net xml 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>。 更新: 我的内部例外: 无法序列化'MyRPGgame.SplashScreen._image'

类型的成员'Microsoft.Xna.Framework.Graphics.Texture2D'

7 个答案:

答案 0 :(得分:23)

在我的情况下,当尝试打开SSRS项目时,Visual Studio 2017版本15.5更新之一出现此错误。解决方案是从项目文件夹中删除* .rptproj.rsuser文件,然后重试。

答案 1 :(得分:4)

我的经验是,在第二个字符的第二行,有一个错误。 看看你的类名是否与XML标签不同。你可能正在改变&#34; XML Root名称&#34;另一个。

查看XML结构以及您将哪个类序列化到哪个节点。

另外,请阅读 MSDN Documentation about the XmlRootAttribute Class

答案 2 :(得分:3)

这通常意味着你在文件的开头有空格;检查<?xml...之前的换行符。更好的是:请在二进制编辑器中查看文件的前几个字节(最好是<SplashScreen)。

可以也意味着你在<SplashScreen

之前的某个地方有一个看不见的unicode或控制字符

答案 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)。