Tag: xml serialization

C#对象为XML

我正在创建一个需要将c#对象转换为XML的应用程序。 我正在使用XML Serializer类来实现这一点。 这是代码片段: public class Anwer { public int ID { get; set; } public string XML { get; set; } public Anwer(int ID, string XML) { this.ID = ID; this.XML = XML; } public Anwer() { } } 这是主要function: string AnswerXML = @”1″; List answerList = new List(); answerList.Add(new Anwer(1,AnswerXML)); AnswerXML = @”2″; […]

C#:反序列化XML文件错误(认为这是一个命名空间问题 – 但是我的生活不能解决它)

我正在反序列化一个XML文件,该文件来自我们的一个客户的Web服务。 问题是,在使用xsd.exe创建类之后,我将文件反序列化并获得通常的“XML文档中存在错误(2,2)”。 视觉工作室错误。 这个,我假设是第2行,它指向命名空间声明: XML文件的顶部: MX 2009-05-11T09:48:51+01:00 SUPPLIER 12420317323327108 顶级: [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.42”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(“code”)] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace=”http://www.mro.com/mx/integration”)] [System.Xml.Serialization.XmlRootAttribute(Namespace=”http://www.mro.com/mx/integration”, IsNullable=false)] public partial class MXWorkorderOutResp { private MXWorkorderOutRespHeader[] headerField; private MXWorkorderOutRespContentMXWORKORDERWORKORDER[][][] contentField; private string languageField; /// [System.Xml.Serialization.XmlElementAttribute(“Header”)] public MXWorkorderOutRespHeader[] Header { get { return this.headerField; } set { this.headerField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute(“MXWORKORDER”, typeof(MXWorkorderOutRespContentMXWORKORDERWORKORDER[]), IsNullable=false)] […]

Serialise to XML并包含序列化对象的类型

在上一个关于在C#中将对象序列化为XmlDocument中 ,我需要将一些错误信息序列化为从asmx样式的webservice调用返回的XmlDocument 。 在客户端上,我需要将XmlDocument反序列化回一个对象。 如果您知道类型,这很简单,但我意识到我想要一种灵活的方法,其中反序列化的类型也在XmlDocument编码。 我目前正在通过向具有类型名称的XmlDocument添加XmlNode手动执行此操作,计算方法如下: Type type = fault.GetType(); string assemblyName = type.Assembly.FullName; // Strip off the version and culture info assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(“,”)).Trim(); string typeName = type.FullName + “, ” + assemblyName; 然后在客户端上我首先从XmlDocument获取此类型名称,并创建传递给XmlSerialiser的类型对象: object fault; XmlNode faultNode = e.Detail.FirstChild; XmlNode faultTypeNode = faultNode.NextSibling; // The typename of the fault type is the […]

为什么我必须删除xmlns属性才能反序列化我的XML文件?

问题 我在简单的设置文件架构上使用Xsd2Code (用于XSD架构的.NET类生成器)。 出于某种原因,当我尝试使用内置的LoadFromFile()或Deserialize()方法时,我得到一个似乎与我的XSD和XML文件中的xmlns属性相关的exception。 如果我删除这些属性,则exception消失。 (有关实际导致exception的代码的详细信息,请参阅下面的“ 更新 ”。) XSD文件 XML文件(失败) – 当我尝试反序列化时,我得到一个exception SQLEXPRESS CL master XML文件(成功) – 反序列化工作正常 SQLEXPRESS CL master exception详细信息 – 如果我运行“失败示例”会发生什么 A first chance exception of type ‘System.InvalidOperationException’ occurred in System.Xml.dll System.InvalidOperationException: There is an error in XML document (2, 2). —> System.InvalidOperationException: was not expected. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSettings.Read3_Settings() — End of inner […]

使用XmlSerializer序列化DataType =“time”字段

使用XmlSerializer序列化DateTime字段时,我得到一个奇怪的结果。 我有以下课程: public class RecordExample { [XmlElement(“TheTime”, DataType = “time”)] public DateTime TheTime { get; set; } [XmlElement(“TheDate”, DataType = “date”)] public DateTime TheDate { get; set; } public static bool Serialize( Stream stream, object obj, Type objType, Encoding encoding) { try { var settings = new XmlWriterSettings { Encoding = encoding }; using (var […]

尽管元素值包含混合内容,但将元素值反序列化为字符串

假设这样的XML: content content 还有一个类: [Serializable] [XmlType(AnonymousType = true, Namespace = “http://foo/bar”)] [XmlRoot(ElementName = “Root”, Namespace = “http://foo/bar”, IsNullable = false)] public class MyRoot { public string FieldBasic { get; set; } public string FieldComplex { get; set; } } 如何将反序列化为中的字符串? 它在内部找到HTML时失败。 我想让它给我一个包含这个内容的字符串: content 如果我将FieldComplex声明为public object FieldComplex (即xsd:anyType ),它有点工作,我得到一个XMLNode[] ,我可以使用它。 但我需要FieldComplex为序列化的类型字符串,因为序列化XML不包含HTML,它将如下: content content 将FieldComplex声明为对象将在元素上插入这些属性: xmlns:q1=”http://www.w3.org/2001/XMLSchema” p3:type=”q1:string” […]

如何在自定义XML序列化方法中使用默认XML序列化

我在.NET中有一个实现IXmlSerializable的类。 我想序列化它的属性,但它们可能是复杂的类型。 这些复杂类型与XML序列化兼容,但它们本身并不实现IXmlSerializable。 从我的ReadXml和WriteXml方法,我如何调用传递给我的XmlReader / XmlWriter上的默认读/写逻辑。 也许代码会让我更清楚我想要的东西: public class MySpecialClass : IXmlSerializable { public List MyList { get; set; } System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema() { return null; } void IXmlSerializable.ReadXml(System.Xml.XmlReader reader) { // Read MyList from reader, but how? // Something like this? // MyList = (List) reader.ReadObject(typeof(List)); } void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer) { // Write MyList to […]

XmlSerializer:将类属性序列化为自定义子元素的属性

我正在使用XmlSerializer 。 我的课: [Serializable] [XmlRoot(ElementName=”MyClass”)] public class MyClass { public string Value; } 我想序列化它,以便Value最终作为名为(例如)“Text”的子元素的属性。 期望的结果: 但是NOT (这会将Value标记为XmlAttribute的效果) 而不是 (这将标记Value作为XmlElement的效果): 3 我该如何实现这一目标? 我知道我可以将Value的类型从string更改为另一个可序列化的自定义类。 不幸的是,我有很多这样的属性,所以我需要创建几十个小类。 有没有更快的解决方案? 编辑: 回应你的意见: 不,并非每个属性都必须序列化为名为“Text”的子元素。 Subelement的名称是独特且明确的。 示例输出XML: blahblahblah 样本类: ! [XmlRoot(ElementName=”Visibility”)] public class Visibility { [XPath(“/site@visible”)] // if only this was possible! public string OnSite { get { return SiteVisible ? “yes” : […]

从XML数据反序列化数组(在ServiceStack中)

我有以下大量的XML数据: MyTest true RESTDataSource可以发生0-n次。 这是我的课程: [DataContract( Namespace = “http://SwitchKing.Common/Entities/RESTSimplified/2010/07” )] public class ArrayOfRESTDataSource { public RESTDataSource[] Data { set; get; } } [DataContract( Namespace = “http://SwitchKing.Common/Entities/RESTSimplified/2010/07” )] public class RESTDataSource { [DataMember] public bool Enabled { get; set; } [DataMember] public string Description { get; set; } } 我从这样的服务器上读取了上面的XML数据: WebRequest client = WebRequest.Create( “http://server:80/datasources” ); […]

如何根据XmlSerializer的值忽略属性

我希望XmlSerializer创建的XML如果它们具有默认值,则排除属性。 这是可能的XmlSerializer或我将不得不看看IXmlSerializable? 例如,我可能有以下课程: public class PositionedObject { public float X { get; set; } public float Y { get; set;} } 我想告诉XmlSerializer在序列化PositionedObject的实例时,如果值为0则不包括X(如果为0,则与Y相同)。