Tag: 序列化

JSON反序列化为具有私有setter的对象

我遇到了JSON和反序列化的问题。 我有一个实时生产代码,它使用消息对象将信息从一个系统传递到另一个系统。 消息的ID非常重要,因为它用于识别它。 我们也不希望任何人设置ID,因此使其成为私人安装者。 尝试反序列化JSON对象并且未设置ID时出现问题。 (显然因为它是私人的) 有没有人有一个好的建议作为最佳的进行方式? 我尝试过使用Iserialisation,但它被忽略了。 我尝试过使用DataContract,但由于我们从外部系统获取数据,因此失败了。 目前我唯一的选择是让ID和TimeCreated字段具有公共设置器。 我有一个这样的对象 Message { public Message() { ID = Guid.NewGuid(); TimeCreated = DateTime.Now(); } Guid ID { get; private set; } DateTime TimeCreated { get; private set; } String Content {get; set;} } 现在我使用以下代码: var message = new Message() { Content = “hi” }; JavaScriptSerializer jss […]

将XML反序列化为对象数组

我正在尝试将XML文件反序列化为对象数组,但我正在接收空对象。 我的问题看起来类似于: 如何将xml反序列化为一个对象数组? 但我似乎无法创建一个inheritanceIXmlSerializable的类。 也就是说,我不认为这种方法是必要的。 难道我做错了什么? 文件对象 [XmlType(“file”)] public class File { [XmlElement(“id”)] public string Id { get; set; } [XmlElement(“company_name”)] public string Company_Name { get; set; } [XmlElement(“docs”)] public HashSet Docs { get; set; } } Doc对象 [XmlType(“doc”)] public class Doc { [XmlElement(“valA”)] public string ValA { get; set; } [XmlElement(“valB”)] public string ValB […]

是否可以将Protobuf-Net与没有无参数构造函数的类一起使用?

使用Protobuf-Net,我发现如果没有无参数构造函数或者我可能会遗漏某些东西,似乎无法反序列化一个类? 我不想要一些带有无参数构造函数的类。 我可以使用某种属性或其他技术吗?

XmlTextWriter序列化问题

我正在尝试创建一个xml。 我用xsd.exe创建了数据类。 根类是MESSAGE 。 因此,在创建MESSAGE并填充其所有属性后,我将其序列化为: serializer = new XmlSerializer(typeof(Xsd.MESSAGE)); StringWriter sw = new StringWriter(); serializer.Serialize(sw, response); string xml = sw.ToString(); 到目前为止一切顺利,字符串xml包含有效(UTF-16编码)xml。 现在我喜欢用UTF-8编码创建xml,所以我这样做: 编辑 :忘记包含流的声明 serializer = new XmlSerializer(typeof(Xsd.MESSAGE)); using (MemoryStream stream = new MemoryStream()) { XmlTextWriter xtw = new XmlTextWriter(stream, Encoding.UTF8); serializer.Serialize(xtw, response); string xml = Encoding.UTF8.GetString(stream.ToArray()); } 问题就出现了:使用这种方法,xml字符串前面加上一个无效的char(臭名昭着的方块)。 当我像这样检查char: char c = xml[0]; 我可以看到c的值为65279。 […]

在WCF上发送Tuple对象?

WCF的Data Contract Serializer是否支持System.Tuple类(即,我可以将Tuple对象传递给WCF调用和/或作为部分或全部结果接收它们)吗? 我找到了这个页面 ,但不是明确的,明确的“你可以发送和接收带有WCF的元组”我希望的答案。 我猜你可以,只要Tuple本身的所有类型都受到Data Contract Serializer的支持 – 有人能为我提供更明确的答案吗? 谢谢。

如何有条件地避免在WCF中序列化属性?

是否有可能动态避免序列化的属性? 假设我的WCF服务中有这样的方法: public CompositeType GetDataUsingDataContract(CompositeType composite) { return new CompositeType(); } CompositeType的位置如下所示: [DataContract] public class CompositeType { public bool _flag = true; [DataMember] public decimal? Value { get; set; } } 当我调用GetDataUsingDataContract方法时,我正在返回CompositeType对象,然后通过WCF技术将其序列化为XML。 如果_flag = true,是否可以避免序列化的Value属性? 我读到了[XmlIgnore],[IgnoreDataMember]等,但我明白这将始终忽略序列化的属性,我必须忽略只有flag = true。 如果flag = false,我仍然想序列化这个属性。

序列化用例

我不清楚什么时候应该使用序列化/反序列化技术 任何人都可以为我提供一些基本的用例场景吗?

使用DataContractJsonSerializer自定义DateTime序列化/反序列化

如何使用DataContractJsonSerializer将默认的JSON DateTime序列化/反序列化更改为自定义格式,以用于对象图中的所有DateTime属性? Json.Net库处理这个,但我不能在这个项目中使用它。 我尝试过IDataContractSurrogate但我无法访问DateTimes的值 – >字符串转换。 模型和预期的JSON是: [DataContract] public class Client { [DataMember(Name = “id”)] public int Id {get; set; } [DataMember(Name = “name”)] public string Name {get; set; } [DataMember(Name = “contacts”)] public IList Contacts {get; set; } [DataMember(Name = “created”)] public DateTime Created {get; set; } [DataMember(Name = “changed”)] public DateTime Changed {get; […]

使用C#XmlSerializer反序列化通用List的问题

我用微软的.net XmlSerializer来对抗一点砖墙。 我正在尝试将一些XML反序列化为一个对象,如果我使用单个对象,这很好,但是当一个对象放入List并尝试序列化/反序列化时,就会出现问题。 首先,这是一个示例C#windows控制台程序来说明问题: http://pastebin.com/m22e6e275 如果将类’Foo’序列化为根元素,则事情表现良好,并且正如预期的那样 – 将JezNamespace xmlns应用于根Foo元素,并且反序列化很好。 但是,如果我创建一个List并序列化它,XmlSerializer: – 创建ArrayOfFoo的根元素 – 将Foo元素作为该元素的子元素 – 将Foo的每个子元素的xmlns设置为JezNamespace命名空间! 前两个我很好,但第三个看起来很疯狂……也许是XmlSerializer中的一个错误? 有什么方法可以处理这种行为吗? 我不想为Foo的每个孩子指定我的命名空间,我只想为Foo指定它。 如果我这样做,目前,XmlSerializer没有正确地反序列化它 – 它只是跳过任何设置了JezNamespace xmlns的Foo元素。 我必须将所有子元素设置为具有该xmlns。 我想要的是XmlSerializer生成类似于: hello world aaa bbb …然后让XmlSerializer能够将其正确反序列化为List。 任何想法我怎么能这样做?

将表达式树转换为字符串,反之亦然,用于WCF

我想将表达式树转换为字符串,反之亦然,以便在WCF客户端和服务器查询表达式中使用 将表达式树转换为字符串以发送到服务器并将字符串转换为服务器中的表达式树,因此需要此转换器 似乎System.Linq.Dynamic是一个很好的库,所以如果是的话请给我一个例子,如果没有请任何人给我一个解决这个问题的方法 我不知道System.Linq.Dynamic如何为这个目标工作(请举例) *******当然我想使用Serialize.Linq将Expression树转换为可序列化的对象,但是这个库对我来说不起作用,因为这个问题