Tag: 序列化

在.NET中使用DataSet.WriteXml时自定义DateTime格式

我有一个问题,我正在写一个DataSet到XML有一个DateTime类型的列,我想控制输出格式。 DataSet data = LoadDataSet(); data.Tables[0].Rows[0][“MyDate”] = DateTime.Now; data.WriteXml(myFile); 默认情况下,XML中DateTime的格式如下所示: 2011-08-02T17:39:00-07:00 我想使用自定义日期格式,或者至少删除时区信息。 有没有办法控制我的数据集XML中的DateTime列的格式? 我的直觉说没有,因为我假设这样做是为了促进跨时区的数据转换但是我注意到我可以成功读取DataSet XML,即使DateTime列标签省略了时区数据,所以我希望我能做点什么类似于写入XML时。

如何序列化List ?

我有Aclass.Bclass和Cclass是Aclass的一部分。 Class A { //Few Properties of Class A List list1 = new List() List list2 = new List() Nsystem NotSystem { get; set; } // Enum Property Type } public enum Nsystem { A = 0, B = 1, C = 2 } 我想序列化A类,并希望用它生成XML; 我还想序列化list1和list2以及枚举… 序列化这个XML有什么好方法,因为我需要将Object转换为XML和XML转换为Object的function…… 有什么好的选择呢? 谢谢

更改WCF中的默认日期序列化

有没有改变WCF中DateTime的默认JSON序列化/反序列化? 目前,DateTime序列化为/Date(1372252162657+0200)/格式,应该没问题,但是当我的服务器不是UTC(我无法更改)时,我遇到了问题。 此服务正在处理的所有日期/时间数据均为UTC格式。 当服务器使用UTC时,一切正常。 但是,staging / prod环境设置为GMT + 1(Paris),序列化器假设日期/时间是GMT + 1,完全忽略属性Kind 。 因此,您希望调用DateTime.SetKind()并将其设置为UTC将无法正常工作。 实际上,序列化时间延迟了一个小时。 我可以做双向日期对话(它在反序列化时也做出相同的假设,因此它总是GMT + 1)对话的日期:UTC到/从服务器时间,但这是乏味的。 所以我想也许我可以覆盖默认的序列化行为。

使用json.net在序列化期间合并两个对象?

我遇到了以下情况可以帮助我实现以下目标吗? 例如,如果我有这个类: – public class Sample { public String name {get;set;} public MyClass myclass {get;set;} } 我的Myclass将如下: public class MyClass { public String p1 {get;set;} public String p2 {get;set;} } 当我使用Json.net来序列化Sample类的对象时,我得到如下,它运行良好。 { “name”:”…”, “myclass”: { “p1″:”…”, “p2″:”…” } } 它是正确的,但我想知道是否有可能得到如下的json字符串? { “name”:”…”, “p1″:”…”, “p2″:”…” }

如何在C#.NET中深层复制不同类型的对象

我需要按字段名称映射ObjectV1和ObjectV2之间的所有字段值和子集合。 ObjectV2与ObjectV1位于不同的namspace中。 模板ClassV1和ClassV2之间的inheritance已被打折扣,因为这两个类需要独立发展。 我考虑过使用reflection(慢速)和二进制序列化(也很慢)来执行公共属性的映射。 有首选方法吗? 还有其他选择吗?

重复序列化和反序列化会创建重复项

大家好我的json serealization问题。 我在Unity下使用Json.NET包:我正在搜索一个数据库,可以在我的应用程序上编辑,并通过wwwForm和一个php文件存储在我的服务器上。 我没有问题来创建它并将其推到网上。 问题是,当我加载它时,数据库最后有一个新条目。 数据库类是这样的: public class Database { public List armies { get; set;} public Database() { armies = new List(); armies.Add (new Army()); } } public class Army { public string faction { get; set;} public List army { get; set;} public Army() { faction = “RED”; army = new List(); army.Add […]

是否有可能通过反思得到一个房产的私人制定者?

我写了一个自定义序列化程序,通过reflection设置对象属性。 可序列化类用serializable属性标记,所有可序列化属性也被标记。 例如,以下类是可序列化的: [Serializable] public class Foo { [SerializableProperty] public string SomethingSerializable {get; set;} public string SometthingNotSerializable {get; set;} } 当系列化程序被要求反序列化SomethingSerializable ,它获取属性的set方法并使用它来设置它,如下所示: PropertyInfo propertyInfo; //the property info of the property to set //…// if (propertyInfo.CanWrite && propertyInfo.GetSetMethod() != null) { propertyInfo.GetSetMethod().Invoke(obj, new object[]{val}); } 这工作正常,但是,如何才能使属性设置器只对序列化器可访问? 如果setter是私有的: public string SomethingSerializable {get; private set;} 然后对propertyInfo.GetSetMethod()的调用在序列化程序中返回null。 有没有办法访问私有的setter或任何其他方式,以确保只有序列化程序可以访问setter? 不保证序列化程序在同一个程序集中。

如何使JSON.NET忽略对象关系?

我正在开发一个Entity Framework项目。 我想序列化一堆实体类实例。 我将它们绑定到一个容器类中: public class Pseudocontext { public List widgets; public List things; Etcetera ……这是我正在尝试序列化的这个类的一个实例。 我希望JSON.NET序列化每个实体类实例的成员,这些实体实际上是底层数据库中的列。 我不希望它甚至尝试序列化对象引用。 特别是,我的实体类有虚拟成员,允许我编写C#代码,导航我所有的实体间关系,而不用担心实际的键值,连接等,我希望JSON.NET忽略我的实体的相关部分类。 从表面上看,似乎有一个JSON.NET配置选项完全正如我所说: JsonSerializer serializer = new JsonSerializer(); serializer.PreserveReferencesHandling = PreserveReferencesHandling.None; 不幸的是,JSON.NET似乎忽略了上面的第二个声明。 我实际上找到了一个网页( http://json.codeplex.com/workitem/24608 ),其他人将同样的问题提请James Newton-King本人注意,他的回答(完整的)是“写一个定制合同解析员。“ 尽管我发现答案是不合适的,但我一直试图遵循其指导。 我非常希望能够编写一个“契约解析器”,它忽略除了原始类型,字符串,DateTime对象和我自己的Pseudocontext类以及它直接包含的列表之外的所有内容。 如果某人有一个至少类似的东西的例子,那可能就是我所需要的。 这就是我自己提出的: public class WhatDecadeIsItAgain : DefaultContractResolver { protected override JsonContract CreateContract(Type objectType) { JsonContract contract = base.CreateContract(objectType); if (objectType.IsPrimitive […]

反序列化向后兼容性

我试图用旧版本的应用程序反序列化“SomeClass”。 我得到以下exception System.Runtime.Serialization.SerializationException:ObjectManager发现无效的修正次数。 这通常表示Formatter中存在问题。 当我序列化0.9版并尝试使用0.8版反 序列化时,反序列化会引发exception。 我认为OptionalField属性可以解决问题,但事实并非如此。 // Version 0.8 [Serializable()] class Foo{ Bar b; } // Version 0.9 [Serializable()] class Foo{ Bar b; [OptionalField] Zoo z; } 鉴于我无法更改版本0.8,我应该如何向Foo对象添加更多状态,以便以前的版本可以反序列化它们的任何内容? 任何指针都会非常感激。 Update 1 Bar和Zoo是其他可序列化的类,包含Hashtables和其他可序列化的东西。 这些课程中的所有内容都是可序列化的。 另外,我没有任何支柱。

如何在C#中仅反序列化部分XML文档

这是我试图解决的问题的一个虚构的例子。 如果我在C#中工作,并且像这样使用XML: 1020 Nissan Sentra 1010 Toyota Corolla Acme Sales 1000 Dollars … and on… and on…. SalesPerson中的XML可能非常长,大小为兆字节。 我想反序列化标记, 但不反序列化SalesPerson XML元素,而是保持原始forms“以后”。 基本上我希望能够将其用作XML的Objects表示。 [System.Xml.Serialization.XmlRootAttribute(“Cars”, Namespace = “”, IsNullable = false)] public class Cars { [XmlArrayItem(typeof(Car))] public Car[] Car { get; set; } public Stream SalesPerson { get; set; } } public class Car { [System.Xml.Serialization.XmlElementAttribute(“StockNumber”)] public […]