C# VisualStudio在反序列化xml以创建对象时发生xaml解析异常
我正在使用VS2012中的silverlight-5制作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
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);