Tag: xml serialization

C#XML在xml标记之后将注释插入XML

我正在使用C#对象来序列化/反序列化XML。 我想在序列化时对XML文件添加注释,这个注释将是标准xml标签之后的基本 此注释不需要反序列化,它是一个基本注释,用于指示创建xml文件的产品和版本。

如何使用XmlAttributeOverrides覆盖集合元素的xml元素名称?

我有一个非常基本的对象对象模型,由System.Xml.XmlSerialization东西序列化。 我需要使用XmlAttributeOverridesfunction为子元素集合设置xml元素名称。 public class Foo{ public List Bars {get; set; } } public class Bar { public string Widget {get; set; } } 使用标准的xml序列化程序,这将成为 … 我需要使用XmlOverrideAttributes来说明这一点 … 但我似乎无法让它重命名集合中的子元素…我可以重命名集合本身…我可以重命名根…不知道我做错了什么。 这是我现在的代码: XmlAttributeOverrides xOver = new XmlAttributeOverrides(); var bars = new XmlElementAttribute(“SomethingElse”, typeof(Bar)); var elementNames = new XmlAttributes(); elementNames.XmlElements.Add(bars); xOver.Add(typeof(List), “Bars”, elementNames); StringBuilder stringBuilder = new StringBuilder(); StringWriter […]

XML对象反序列化到接口

我有两个类SccmAction和TicketAction,它们都实现了接口IDelivery。 这些类将在一个处理队列上传输,我只想从中获取消息并根据Deliver方法进行操作。 但是,我似乎无法反序列化到接口,因为当我尝试这样做时会抛出System.NotSupportedException 。 从我收集的内容来看,XMLSerializer需要一个具体的序列化类型。 这是否让我不得不创建一个实现IDelivery并从中inheritanceSccmAction和ArsAction的抽象类? 我错过了什么吗? 编辑进一步说明 我可能有一个设计缺陷,但我的目的是从包含这些对象的队列中提取消息。 我的目的是让所有离开此队列的对象实现接口,确保处理对象的应用程序只对Deliver方法进行操作。 Deliver的每个对象实现都会有所不同。 要反序列化的代码 using (SqlConnection connection = new SqlConnection(ConnectionString)) { SqlCommand command = new SqlCommand(ReceiveString, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { byte[] sb = (byte[])reader[“message_body”]; SccmAction sa = DeserializeObject(sb); IDelivery iD = DeserializeObject(sb); } reader.Close(); } public static T DeserializeObject(byte[] ba) { XmlSerializer […]

枚举的XML序列化

我在序列化枚举值时遇到问题。 这是代码: [System.Xml.Serialization.XmlRootAttribute(Namespace = “”, IsNullable = false)] public class REQUEST { [System.Xml.Serialization.XmlAttributeAttribute()] public string ID; [System.Xml.Serialization.XmlAttributeAttribute()] public REQUESTTypetype Type; } public enum REQUESTTypetype { One, Two, Three, Four, } … REQUEST request = new REQUEST(); request.ID = “1234”; request.Type = REQUESTTypetype.One; XmlDocument doc = new XmlDocument(); MemoryStream ms = new MemoryStream(); StreamWriter sw = […]

XmlSerialization Collection as Array

我正在尝试序列化需要使用多个同名元素的自定义类。 我尝试过使用xmlarray,但它将它们包含在另一个元素中。 我希望我的xml看起来像这样。 some text some more text 我的代码: [Serializable(), XmlRoot(“root”)] public class test { [XmlArray(“trees”)] public ArrayList MyProp1 = new ArrayList(); public test() { MyProp1.Add(“some text”); MyProp1.Add(“some more text”); } }

ASP.NET Web API中的XML命名空间

我目前正在开发一个项目,要求我从端点和JSON输出XML。 我有以下型号: [DataContract(Namespace=”http://www.yale.edu/tp/cas”)] [XmlType(“serviceResponse”)] [XmlRoot(Namespace=”http://www.yale.edu/tp/cas”)] public class ServiceResponse { [XmlElement(“authenticationSuccess”)] public AuthenticationSuccess Success { get; set; } [XmlElement(“authenticationFailure”)] public AuthenticationFailure Failure { get; set; } } 当success不为null时,输出如下: 现在,我可以看到,显然,我没有为命名空间分配前缀,我告诉元素是其中的一部分。 我的问题是我找不到使用媒体格式化程序在MVC4中添加名称空间前缀的地方。 我在global.asax中有以下内容: GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; GlobalConfiguration.Configuration.Formatters.XmlFormatter.RemoveSerializer(typeof(Models.ServiceResponse)); GlobalConfiguration.Configuration.Formatters.XmlFormatter.SetSerializer(typeof(Models.ServiceResponse), new Infrastructure.NamespaceXmlSerializer(typeof(Models.ServiceResponse))); 我创建了一个基于XmlSerializer的自定义序列化程序,试图拦截写入请求并在那里添加命名空间列表。 这个方法的问题是,现在我在每个可重写方法中都有断点,并且在序列化时没有一个断点导致我相信我的序列化器没有被使用。 是否有一些内置的方法来完成我想要做的事情,或者我是否在重新实现XmlMediaTypeFormatter以在序列化对象时传入命名空间?

C#将XML反序列化为对象

将一些xml反序列化为C#中的对象时遇到问题。 我收到的错误是…… xmlns=”> was not expected. 我收到的用于生成课程的XSD如下…… Liste des avis de remboursements Avis de remboursement lié à une DC (剪断) 我尝试导入的文件如下: 2010-06-22 25.0 0.0 25.0 0.0 0.0 0.0 0 C 319984 030 (剪断) 我认为正在发生的事情是,当.Net尝试对xml进行去磁化时,它会触及包含“xmlns:ast”的第一行并对其进行投诉。 据我所知,.Net将尝试将属性映射到目标类中的公共属性(并且它不会找到一个名为xmlns。或者我如何处理名称空间有问题。 我的反序列化代码如下所示: XmlDocument _Doc = new XmlDocument(); _Doc.Load(@”C:\inputfile.xml”); XmlSerializer _XMLSer = new XmlSerializer(typeof(ListeAvisRemboursements)); ListeAvisRemboursements _X = (ListeAvisRemboursements)_XMLSer.Deserialize(new StringReader(_Doc.OuterXml)); 我还尝试了将命名空间管理器添加到XML文档的各种组合。 XmlNamespaceManager _Ns […]

c#中的XML序列化和DefaultValue(“”)相关问题

我的class属性有默认值,它将序列化。 public class DeclaredValue { [XmlElement(ElementName = “Amount”, DataType = “double”, IsNullable = false), DefaultValue(999)] public double Amount { get; set; } [XmlElement(ElementName = “Reference2”, DataType = “string”, IsNullable = false), DefaultValue(“”)] public string Reference2 { get; set; } } 所以我们创建了DeclaredValue类的实例并为Reference2属性提供了值,并且没有为Amount赋值。 因此,当我们序列化类DeclaredValue时,在我的xml中找不到数量的标签。 我提到金额“999”的默认值,然后为什么它不能在序列化中工作。 我希望如果不为金额分配任何东西,那么amoun标签应该在我的xml中有默认值。 如果用户不为此属性分配任何内容,我需要以什么方式装饰它在序列化后始终在xml中带有默认值的amount属性。 请指导我在代码中需要更改的内容以获得我想要的输出。

如何在使用XmlSerializer时添加换行符

我想知道如何在使用XmlSerializer时为每个元素添加换行符? 示例代码: XmlSerializer serializer = new XmlSerializer(typeof(xxx)); using (XmlWriter xmlWriter = XmlWriter.Create(“test.xml”) { serializer.Serialize(xmlWriter, xxx); }

如何抑制列表属性的XML标记

序列化时是否可以避免列表属性标记? //[Serializable()] – removed, unnecessary public class Foo { protected List fooBars = new List(); public virtual List FooBars { get { return fooBars; } set { fooBars = value; } } } // [Serializable()] – removed, unnecessary public class FooBar { public int MyProperty { get; set; } } 序列化Foo给出(评论除外): 7 9 通缉输出: 7 […]