Tag: datacontractserializer

XSLT用命名空间转换XML

我有一些XML,我正试图使用​​XSLT转换为HTML,但是我无法让它为我的生活工作。 有人能告诉我我做错了什么吗? XML <ArrayOfBrokerage xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.test.com/"> <Brokerage> <BrokerageID>91</BrokerageID> <LastYodleeUpdate>0001-01-01T00:00:00</LastYodleeUpdate> <Name>E*TRADE</Name> <Validation i:nil="true" /> <Username>PersonalTradingTesting</Username> </Brokerage> </ArrayOfBrokerage> XSLT <xsl:stylesheet version="1.0" xmlns="http://www.test.com/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xslFormatting="urn:xslFormatting"> <xsl:output method="html" indent="no"/> <xsl:template match="/ArrayOfBrokerage"> <xsl:for-each select="Brokerage"> Test </xsl:for-each> </xsl:template> </xsl:stylesheet>

使用DataContractSerializer序列化没有名称空间的对象

如何从使用DataContractSerializer序列化的对象的XML表示中删除XML名称空间? 该对象需要被序列化为非常简单的输出XML。 最新最好的 – 使用.Net 4 beta 2 该对象将永远不需要反序列化。 XML不应该有任何xmlns:… namespace refs 任何exception和ISubObject的子types都需要被支持。 改变原始的对象将是非常困难的。 目的: [Serializable] class MyObj { string str; Exception ex; ISubObject subobj; } 需要序列化成: <xml> <str>…</str> <ex i:nil="true" /> <subobj i:type="Abc"> <AbcProp1>…</AbcProp1> <AbcProp2>…</AbcProp2> </subobj> </xml> 我用这个代码: private static string ObjectToXmlString(object obj) { if (obj == null) throw new ArgumentNullException("obj"); var serializer = […]

“Type not expected”,使用DataContractSerializer – 但它只是一个简单的类,没有有趣的东西?

我重构我的XML序列化,并认为我会尝试DataContractSerializer。 一切顺利,直到它需要序列化这个类: using System; using System.Runtime.Serialization; namespace VDB_Sync.Model { [DataContract(Name="Konstant")] public class Konstant : DataFelt { [DataMember] private MySqlDbType mydataType; [DataMember] private object value; public Konstant(string navn, MySqlDbType dataType, object value) : base(navn, dataType, "*Konstant", false, false) { //this.navn = navn; this.mydataType = dataType; this.value = value; if (navn.Contains("*Løbenummer")) { navn = "*Konstant: " + […]

XML序列化和命名空间前缀

我正在寻找一种C#方式,我可以将一个类序列化为XML并添加一个名称空间,但是定义该名称空间将使用的前缀。 最终,我试图生成以下的XML: <myNamespace:Node xmlns:myNamespace="…"> <childNode>something in here</childNode> </myNamespace:Node> 我知道DataContractSerializer和XmlSerializer我都可以添加一个名称空间,但是他们似乎在内部生成了一个前缀,而我无法控制的东西。 我能够用这些序列化器(我可以使用其中之一)来控制它吗? 如果我无法控制名称空间的生成,那么我是否需要编写自己的XML序列化程序,如果是的话,编写它的最佳方法是什么?

由DataContractSerializer创build的XML的格式

有没有一种简单的方法让DataContractSerializer吐出格式化的XML而不是一个长string? 我不想以任何方式更改标签或内容,只需要添加换行符和缩进来使XML更具可读性。 <tagA> <tagB>This is</tagB> <tagC>Much</tagC> <tagD> <tagE>easier to read</tagE> </tagD> </tagA> <tagA><tagB>This is</tagB><tagC>Much</tagC><tagD><tagE>harder to read</tagE></tagD></tagA>

使用DataContractSerializer来序列化,但不能反序列化

我有以下两个function: public static string Serialize(object obj) { DataContractSerializer serializer = new DataContractSerializer(obj.GetType()); MemoryStream memoryStream = new MemoryStream(); serializer.WriteObject(memoryStream, obj); return Encoding.UTF8.GetString(memoryStream.GetBuffer()); } public static object Deserialize(string xml, Type toType) { MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)); // memoryStream.Position = 0L; XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memoryStream, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null); DataContractSerializer dataContractSerializer = new DataContractSerializer(toType); return dataContractSerializer.ReadObject(reader); } […]

DataContractSerializer不会调用我的构造函数?

我只是意识到一些疯狂的东西,我认为这是完全不可能的:当反序列化一个对象时, DataContractSerializer不会调用构造函数 ! 以这个class级为例: [DataContract] public class Book { public Book() { // breakpoint here } [DataMember(Order = 0)] public string Title { get; set; } [DataMember(Order = 1)] public string Author { get; set; } [DataMember(Order = 2)] public string Summary { get; set; } } 当我反序列化这个类的一个对象时,断点不会被打中。 我完全不知道它是如何可能的,因为它是这个对象的唯一构造函数! 我认为,也许由于DataContract属性,编译器生成了一个额外的构造函数,但我无法通过reflectionfind它… 所以,我想知道的是:如何创build我的类的实例,而不需要调用构造函数? 注:我知道,我可以使用OnDeserializing属性来初始化我的对象,当反序列化开始时,这不是我的问题的主题。

WCF窒息属性没有“设置”。 任何解决方法?

我有一些我通过服务方法传递的类,并且该类具有只读属性: [DataContract] public class ErrorBase { [DataMember] public virtual string Message { get { return ""; } } } 我在服务方面得到一个例外: System.Runtime.Serialization.InvalidDataContractException:types为“MyNamespace.ErrorBase”的属性“Message”没有设置方法。 我必须把这个属性当作getter,我不能让用户给它赋值。 任何解决方法,我可以使用? 还是我缺less一些额外的属性?

何时使用DataContract和DataMember属性?

我很关心WCF中的DataContract属性。 据我所知,它被用于类似类的用户定义types的序列化。 我写了一个这样暴露在客户端的类。 [DataContract] public class Contact { [DataMember] public int Roll { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string Address { get; set; } [DataMember] public int Age { get; set; } } 它正常工作,但是当我删除DataContract和DataMember它也能正常工作。 我不明白为什么它正常工作。 任何人都可以告诉我DataContract的实际用途是什么? 我的服务合同是这样的 [ServiceContract] public interface IRestServiceImpl { [OperationContract] Contact XmlData(string id); }

WCF Datacontract,有些字段不反序列化

问题: 我有一个WCF服务设置为外部系统调用的端点。 这个调用是发送普通的XML。 我通过使用RequestBuilder将调用从Fiddler发送到服务来testing系统。 问题是我所有的领域都被反序列化,除了两个领域。 price_retail和price_wholesale 。 我错过了什么? 所有其他字段反序列化没有问题 – 服务响应。 这只是这些领域。 XML消息: <widget_conclusion> <list_criteria_id>123</list_criteria_id> <list_type>consumer</list_type> <qty>500</qty> <price_retail>50.00</price_retail> <price_wholesale>40.00</price_wholesale> <session_id>123456789</session_id> </widget_conclusion> 服务方式: public string WidgetConclusion(ConclusionMessage message) { var priceRetail = message.PriceRetail; } 消息类别: [DataContract(Name = "widget_conclusion", Namespace = "")] public class ConclusionMessage { [DataMember(Name = "list_criteria_id")] public int CriteriaId { get; set;} [DataMember(Name = "list_type")] […]