Tag:

XmlSerializer:如何反序列化不再存在的枚举值

我正在使用XMLSerializer将此类保存到文件中。 该类有一个字符串和一个枚举,如下所示: public class IOPoint { string Name {get; set;} TypeEnum {get; set;} } public enum TypeEnum { Temperature, Pressure, Humidity, } 序列化时,它看起来像这样。 Relative Humidity Humidity 我一直在序列化和反序列化这个对象,几个版本都没有问题。 我不再想支持湿度,所以我将它从枚举中删除了。 但是,这会在从XML反序列化时导致exception,因为TypeEnum字段中的值Humidity不是TypeEnum的有效值。 这是有道理的,但如何处理呢? 我想做的就是忽略这个错误。 并将值保留为null。 我已经尝试实现OnUnknownElement XmlDeserilizationEvent类。 不幸的是,这并没有发现这个错误。 关于如何捕获和忽略此错误的任何想法(我可以在反序列化完成后清理)。 米奇

Json.NET MissingMemberHandling设置

当Json字符串缺少C#类所需的属性时,我希望Json.NET抛出JsonSerializationException 。 还有MissingMemberHandling Enumeration 在反序列化期间遇到缺少的成员时抛出JsonSerializationException。 但我认为这与我想要的相反。 我认为这意味着c#类中缺少一个成员。 我想要一个失踪的Json成员。 我的代码是 public MyObj Deserialise(string json) { var jsonSettings = new JsonSerializerSettings(); jsonSettings.MissingMemberHandling = MissingMemberHandling.Error; return JsonConvert.DeserializeObject(json, jsonSettings); } 例如 public class MyObj { public string P1 { get; set; } public string P2 { get; set; } } string json = @”{ “”P1″”: “”foo”” }”; json缺少P2。 我想知道这是什么情况。 […]

定制序列化

我有一些必须序列化的对象: class Displayable{ string name; Sprite icon; } icon字段需要自定义序列化,因为Sprite已经被序列化(在不同的文件中,具有自己的格式,由游戏引擎)并且我只需要存储引用它们的方法(比如说一个string ,作为Dictionary的键) Dictionary )。 使用BinaryFormatter我尝试实现ISerializable和ISerializationSurrogate但这两个方法都在反序列化时创建Sprite对象的新实例,因此它们不适合我的情况。 我想拥有与ISerializationSurrogate相同的function,除了我不想要SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)的第一个参数SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)因为我需要返回一个我已经拥有的对象而不是接收一个来自反序列化器的新实例并用数据填充它。 我也尝试过像SharpSerializer这样的外部库,但是我不喜欢使用公共无参数构造函数的限制,它并不能让你自定义特殊类的序列化。 我已经阅读了ProtoBuffers,但它不支持inheritance,我需要它在其他地方。 所以我的要求是: inheritance支持 能够为某些类型定义自定义序列化 这些自定义类型的反序列化不应该自己创建实例 有没有图书馆这样做? 否则,我太挑剔了吗? 你通常如何实现对存储在其他地方的对象的引用的序列化? 先感谢您。 编辑:这是我想要的 public class SerializableSprite : ISerializationSurrogate { public static Dictionary sprites; public void GetObjectData(object obj, SerializationInfo info, […]

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 […]

Json.NET反序列化其他类型中的元组不起作用?

使用Json.net,反序列化包含Tuple的类型不起作用(序列化工作,但反序列化不起作用): [TestMethod] public void Test() { var orig = new TupleHolder(“what????”, true); var json = JsonConvert.SerializeObject(orig); Assert.AreEqual(“{\”Tup\”:{\”Item1\”:\”what????\”,\”Item2\”:true}}”, json); // great! serialization works like a charm! now let’s test deserialization: var dupl = JsonConvert.DeserializeObject(json); Assert.AreEqual(“ZZZ”, dupl.Tup.Item1); // pass! but it should be “what????”… what???? Assert.AreEqual(false, dupl.Tup.Item2); // pass! but it should be “true”, right??? Assert.AreEqual(orig.Tup.Item1, dupl.Tup.Item1); […]

覆盖Json反序列化一个前导零作为小数而不是八进制值的数字

我正在生成一个json对象, { “number”:0100 } 当使用Newtonsoft.Json在C#中反序列化此对象时, 0100被视为八进制数,因为前导零。 有没有办法覆盖此function并使其将数字视为十进制整数?

如何将具有不同名称但具有相同属性集的xml元素反序列化为类型化数组/集合

这是我试图反序列化的XML文件的一部分: … 7 94 LPS 120 V 540 222 1758 W 400 mm 150 mm 1348 W 475 mm 1 Cooling <By Category> 108 108 50 VA … … 这些是我用来反序列化它的类: [XmlType(AnonymousType = true)] [XmlRoot(“entry”, Namespace=”http://www.w3.org/2005/Atom”)] public class PartAtom { … [XmlElement(“family”, Namespace=”urn:schemas-autodesk-com:partatom”)] public Family Family { get; set; } } public class Family { [XmlAttribute(“type”)] […]

如何将JSON反序列化为正确类型的对象,而不必事先定义类型?

我搜索了类似的问题,找不到任何与我想要的相匹配的东西。 C#的新手请耐心等待。 我有一些json文件,我正在反序列化。 我希望文件反序列化为正确类型的对象,而不必事先定义类型。 这是我的代码: public class loadJson { //path of the file location public void readJson(string path) { //array of files at the path location. right now just reading one file FileInfo[] files = new DirectoryInfo(path).GetFiles(“seleniumExample.json”).ToArray(); foreach (FileInfo fi in files) { dynamic b1 = null; using (StreamReader file = new StreamReader(fi.FullName)) { string […]

如何将C#WCF DataContract序列化/反序列化到XML或从XML序列化

我正在开发一个WCF服务,它将由多个不同的客户端应用程序使用。 为了使一个function起作用,服务器需要将XML文件读入C#DataContract,然后将其传递给相关客户端。 据我所知,从MSDN网站,这是可能的,但我找不到任何完整的例子。 特别是,该网站谈到了一个“流”参数,我还没有完成。 我的数据协定有一个属性字段,它是另一个具有多个简单属性字段的数据协定的列表。 例如 [DataContract] public class MyClass1 { [DataMember] public string name; [DataMember] public int age; } [DataContract] public class MyClass2 { [DataMember] public List myClass1List; } 我的课看起来像这样。

在反序列化期间选择性地转义字符串中的HTML

我正在寻找一个JsonConverter ,它在字符串中转义HTML,除非应用了[AllowHtml]属性; private class ObjectWithStrings { // will be HTML-escaped public string Name { get; set; } // won’t be escaped [AllowHtml] public string Unsafe { get; set; } } 所以我正在尝试用自定义的ReadJson属性编写JsonConverter; public override bool CanConvert(Type objectType) { return objectType == typeof(string); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var […]