Tag: 序列化

使用字符串属性反序列化boolean元素

我正在尝试构建一个将使用此XML结构进行映射的类,但无法弄清楚如何。 我已经看过这里的示例,如果元素值是一个字符串,我可以使用[XmlText]。 在我的例子中,元素值是布尔值。 我应该如何构建我的“服务”课程? (我认为)我知道如何处理“服务”元素:-)。 它只是一组“服务”对象。 我只是不确定如何构建“服务”类。 true 我有这个: [XmlArray(“Services”)] [XmlArrayItem(“Service”)] public Service[] Services { get; set; } 还有这个: public class Service { [XmlAttribute] public string Name { get; set; } // How do I get the boolean value here????? }

指定自定义序列化程序时,未反序列化故障详细信息

我在我的应用程序中使用自定义XmlObjectSerializer 。 为此,我用MyOperationBehavior替换XmlSerializerOperationBehavior ,它看起来像这样: public class MyOperationBehavior : DataContractSerializerOperationBehavior { public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList knownTypes) { return new MySerializer(); } public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList knownTypes) { return new MySerializer(); } } 问题在于,通过这样做,任何故障都被反序列化为非genericsFaultException而不是FaultException并且我无法访问故障的详细信息。 在做了一些调查之后,我发现问题的根源在于,通过inheritanceDataContractSerializerOperationBehavior ,.NET在内部将FaultFormatter设置为DataContractSerializerFaultFormatter ,它不知道如何反序列化故障的细节(而不是XmlSerializerFaultFormatter )。 问题肯定不在MySerializer ,因为在它到达我的ReadObject方法之前抛出了FaultException 。 所以我的问题是我该怎么做才能使WCF正确反序列化我的错误细节? 我试着找一种自己设置FaultFormatter的方法,但没有运气,特别是因为所有这些格式化程序都是内部的。

如何处理特殊字符,如 什么时候序列化/反序列化xml对象?

我有一些商业对象来存储客户名称,有时名称包含一些特殊字符,如 ,  。 这些名称是从第三方导入的,我无法从源中删除有趣的字符。 应用程序将通过XmlSerializer序列化/反序列化客户对象,但奇怪的是,当我使用特殊字符序列化名称时,没有错误,结果将像这样Jim  。 但是当我反序列化输出xml时,我将得到一个exceptionThere is an error in XML document (3, 15) 。 那么如何在我的应用程序中处理这些特殊字符? 谢谢! 附上一些测试代码: public class Customer { public string Name; } class Program { public static T DeserializeFromXml(string settings) where T : class { var serializer = new XmlSerializer(typeof(T)); var reader = new StringReader(settings); var result = […]

如何使用DataContractSerializer为generics类型编写自定义序列化程序?

我想编写一个自定义序列化程序,用于将会话状态存储到Azure缓存(预览)中 ,这意味着这个自定义序列化程序必须实现IDataCacheObjectSerializer ( 如果我错了,请告诉我 )。 我需要编写这个custome序列化程序的原因是我需要序列化一些包含一些System.Data.Linq.EntitySet属性的Linq对象。 默认的序列化程序NetDataContractSerializer无法序列化EntitySet 。 我的计划是使用DataContractSerializer编写自定义序列化程序( 我搜索了一些文章,提到DataContractSerializer可以序列化EntitySet ,所以如果我错了,请告诉我 ),但问题是我如何编写一个可以支持generics的自定义序列化程序类型。 目前,我的自定义序列化程序代码如下: public class CustomSerializer : IDataCacheObjectSerializer { public CustomSerializer() { } public object Deserialize(System.IO.Stream stream) { /* How can I know the type of object?????? */ DataContractSerializer dcs = new DataContractSerializer(“Type of object”); } public void Serialize(System.IO.Stream stream, object value) { DataContractSerializer dcs […]

如何使用protobuf-net或其他序列化程序序列化第三方类型?

我有List但是protobuf-net给了我错误,它没有合同。 当我没有源时,如何为它指定合约? 它实际上说它无法推断出类型,但我认为这是因为我没有使用它的属性,对吗? 默认的二进制序列化程序也会抱怨,因为类型未标记为可序列化。 编辑:错误消息是: Type is not expected, and no contract can be inferred: HtmlAgilityPack.HtmlNode

版本容错序列化 – 如何查找原始的AssemblyName

在.NET 2.0(以及我认为更高版本)中,版本容忍序列化将成功地从对象所在的程序集的旧版本反序列化序列化对象。 当我使用hex查看器打开这样一个二进制格式化的序列化流时(一个简单的拖放到VS中)我可以看到这个流中包含的汇编信息。 在反序列化期间,是否存在检索此信息的方法? 例如,这可以用于在读取旧内容时将修正应用于已知问题。 更新:看起来它无法完成(除了更改类本身,如Paul Betts的回答,也没有测试过)所以有没有其他方法来读取这个值? 二进制格式是否已发布?

c#serialization – 包含带属性的简单内容的复杂类型

我有一个现有的解决方案,它使用svcutil来创建一组基于XSD架构的类。 我现在不得不对该模式进行编辑,我遇到了一些绊脚石。 架构将使用以下类型进行扩展: 这会导致XML输出如下: Dependent Independent 当试图产生这种抱怨时,SVCUtil会窒息 “无法导入命名空间tt中的’AwkwardChild’类型。不支持具有简单内容扩展的复杂类型。更改架构以便类型可以映射到数据协定类型或使用ImporXmlType或使用不同的序列化程序。” 而且我认为我理解这一点,因为它试图输出字符串类型,但包含属性。 我试图弄清楚是否有一种方法可以手动编写一个类来实现这种输出,但我无法找到一种方法来使字符串在xml节点中显示为“简单内容”而不是作为子元素,例如这个类: [DataContractAttribute(Name = “AwkwardChild”, Namespace = “tt”)] public class Awkward { [DataContractAttribute(Name=”id”)] public string id { get; set; } //What do I put here to get this to appear as the content of //the awkward node, not in an element? public string nodecontent { get; set; […]

根据属性将元素反序列化为属性

我想看看是否有一种简单的方法可以将填充了元素的XML文件反序列化回属性类,特别是元素属性“name”作为要附加的属性。 例如,我有一个XML文件格式,如下所示: 1 test 42 hello world 我想知道是否有一种简单的方法可以将其反序列化为类似于此格式的类: public class SomeObject { [XmlElement(“number_value_one”)] public Int32 NumberValueOne { get; set; } [XmlElement(“number_value_two”)] public Int32 NumberValueTwo { get; set; } [XmlElement(“string_value_one”)] public String StringValueOne { get; set; } [XmlElement(“string_value_two”)] public String StringValueTwo { get; set; } } 我知道格式不是最好的序列化等,但我不能改变文件格式为这个项目的格式。 目前我正在手工阅读每个元素的价值,这是很多代码和相当混乱。 要将它序列化回xml,我使用reflection来解决手工编写每个元素的需要。 但我想知道是否有一种简单的方法来处理这种格式。 并非所有元素都是string / int,有些是读取后要解析的自定义类型等。

Json.net:序列化/反序列化不适用于具有循环引用的ISerializable对象

一段时间后我报告了一个问题 ,我在Json.net 4.5 R11中得到了修复。 如果我的循环引用属性Manager为NULL,则序列化和反序列化工作正常。 但是当循环引用属性Manager设置为NON NULL值时,它会在序列化字符串中被忽略,因此它会在反序列化中引发exception。 Json.net问题基础说问题在你的代码中,但我无法弄清楚。 有人可以帮我吗? 问题: 下面的代码有什么问题吗? 如果是,我应该怎么做才能解决问题? 如果没有,那么在Json.net代码中应该做些什么来解决这个问题呢? 一些更新 :在当前使用二进制序列化的遗留应用程序中需要这样做。 由于更改很大,因此使用Json序列化标记标记序列化中涉及的所有私有字段的工作量太大。 由于Json.net可以对ISerializable对象进行序列化,我们希望这样做。 如果没有循环引用对象,则此方法有效。 我的课程 [Serializable] class Department : ISerializable { public Employee Manager { get; set; } public string Name { get; set; } public Department() { } public Department( SerializationInfo info, StreamingContext context ) { Manager = ( Employee […]

使用protobuf-net进行惰性,流驱动的对象序列化

我们正在开发用于流式传输大量数据的WCF服务,因此我们选择使用WCF流function与protobuf-net序列化相结合。 语境: 通常,一个想法是序列化服务中的对象,将它们写入流并发送。 在另一端,调用者将接收Stream对象,它可以读取所有数据。 所以目前服务方法代码看起来有点像这样: public Result TestMethod(Parameter parameter) { // Create response var responseObject = new BusinessResponse { Value = “some very large data”}; // The resposne have to be serialized in advance to intermediate MemoryStream var stream = new MemoryStream(); serializer.Serialize(stream, responseObject); stream.Position = 0; // ResultBody is a stream, Result is a […]