C# VisualStudio在反序列化xml以创建对象时发生xaml解析异常

C# VisualStudio在反序列化xml以创建对象时发生xaml解析异常,c#,xml,silverlight,deserialization,xml-deserialization,C#,Xml,Silverlight,Deserialization,Xml Deserialization,我正在使用VS2012中的silverlight-5制作c#并试图嘲讽 我的代码如下所示: Filename is `attribute.cs` using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using

我正在使用VS2012中的silverlight-5制作
c#
并试图嘲讽

我的代码如下所示:

Filename is `attribute.cs`
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Runtime.Serialization.Json;
    using System.Runtime;
    using System.Xml.Serialization;
    using System.Runtime.Serialization;
    using System.IO;
    using System.Collections.Generic;
    using System.Diagnostics;



    namespace Model.XML
    {
        [DataContract]
        public class attribute
        {
            [DataMember]
            public string type { get; set; }

            [DataMember]
            public string displayed { get; set; }

            [DataMember]
            public string add_remove { get; set; }

            [DataMember]
            public string ccypair { get; set; }

            [DataMember]
            public List<int> item { get; set; }

            public static void Main()
            {
               // System.IO.StreamReader myFileStream = new System.IO.StreamReader("C:\\Users\\SHEK\\Desktop\\VannakNew\\DEV_CENTER\\Model\\XML\\XmlParameter.xml");
                FileStream myFileStream = new FileStream(@"\XmlParameter.xml", FileMode.Open); //On debugging after this line the code breaks and generate exception
                attribute mainobj = null;
                XmlSerializer ser = new XmlSerializer(typeof(attribute));
                mainobj = ser.Deserialize(myFileStream) as attribute;
                Debug.WriteLine(mainobj.type);  
            }        
        }
    }
注释后编辑:我在阅读注释后将代码更改为此,但问题是它甚至不在
FileStream myFileStream=new FileStream(@“\XmlParameter.xml”,FileMode.Open)之后执行任何行它直接再次显示该异常

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Runtime.Serialization.Json;
using System.Runtime;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;



namespace Model.XML
{
   [XmlRoot("parameter")]

    public class attribute
    {
        [DataMember]
        public string type { get; set; }

        [DataMember]
        public string displayed { get; set; }

        [DataMember]
        public string add_remove { get; set; }

        [DataMember]
        public string ccypair { get; set; }

        [DataMember]
        public List<int> item { get; set; }

        public static void Main()
        {
           // System.IO.StreamReader myFileStream = new System.IO.StreamReader("C:\\Users\\SHEK\\Desktop\\VannakNew\\DEV_CENTER\\Model\\XML\\XmlParameter.xml");
            FileStream myFileStream = new FileStream(@"\XmlParameter.xml", FileMode.Open);

            attribute mainobj = null;
            XmlSerializer ser = new XmlSerializer(typeof(parameter));
            mainobj = ser.Deserialize(myFileStream) as attribute;
            Debug.WriteLine(mainobj.type);  
        }        
    }
}
使用系统;
Net系统;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Documents;
使用System.Windows.Ink;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Animation;
使用System.Windows.Shapes;
使用System.Runtime.Serialization.Json;
使用系统运行时;
使用System.Xml.Serialization;
使用System.Runtime.Serialization;
使用System.IO;
使用System.Collections.Generic;
使用系统诊断;
名称空间模型.XML
{
[XmlRoot(“参数”)]
公共类属性
{
[数据成员]
公共字符串类型{get;set;}
[数据成员]
显示的公共字符串{get;set;}
[数据成员]
公共字符串add_remove{get;set;}
[数据成员]
公共字符串ccypair{get;set;}
[数据成员]
公共列表项{get;set;}
公共静态void Main()
{
//System.IO.StreamReader myFileStream=new System.IO.StreamReader(“C:\\Users\\SHEK\\Desktop\\VannakNew\\DEV_CENTER\\Model\\XML\\XmlParameter.XML”);
FileStream myFileStream=newfilestream(@“\XmlParameter.xml”,FileMode.Open);
属性mainobj=null;
XmlSerializer ser=新的XmlSerializer(typeof(参数));
mainobj=ser.Deserialize(myFileStream)作为属性;
Debug.WriteLine(mainobj.type);
}        
}
}

传递给
XmlSerializer
的类型,因为根类型表示xml的根。您正在传递
typeof(属性)
。此类型与xml不匹配;您应该传递
typeof(Parameter)
即看起来像xml的类型。例如:

[XmlRoot("parameter")]
public class Parameter {
    [XmlElement("component")]
    public Component Component {get;set;}
}
(编辑,请参见注释)另一个文件

public class Component {
    [XmlElement("attributes")]
    public List<Attribute> Attributes {get;set;}
}

顺便说一句
XmlSerializer
不使用
DataMember
属性。我使用的是silverlight。它不支持“[Serialize]”@user234839这很好,
XmlSerializer
也不使用
[Serializable]
;我没有提到
[Serialize]
[Serializable]
,但我希望每个类都有不同的文件,比如为组件单独设置类,为属性和参数单独设置类。所有的类不能在同一个类中file@user234839你是说C#文件吗?然后创建多个文件,并在每个文件中放入所需的一个或多个类。这纯粹是组织上的,丝毫不会改变答案;;我的意思是attribute.cs、component.cs和parameter.cs都是分开的。我用silverlight-5来做这个。@user234839所以。。。就这么做?请参见编辑。代码不需要在一个文件中-将它们显示在一起纯粹是为了方便(实际上,我甚至没有提到文件)@user234839代码在哪里并不重要;这就去了任何你需要做反序列化的地方。我无法告诉您要在哪里进行反序列化:这取决于您。但具体来说,它是“在您的示例中的任何位置”-只需更改两行即可。
public class Component {
    [XmlElement("attributes")]
    public List<Attribute> Attributes {get;set;}
}
XmlSerializer ser = new XmlSerializer(typeof(Parameter));
var mainobj = (Parameter)ser.Deserialize(myFileStream);