Tag: 序列化

如何让反序列化在期望int的非整数上抛出exception?

我试图将json(例如id: 4.5 )中的十进制值解析为poco int ,我想要一个exception。 背景: 当遇到期望int的小数时,此反序列化会抛出Newtonsoft.Json.JsonSerializationException : httpContent.ReadAsAsync<MyCollection>( mediaTypeFormatters, cancellationToken); MyCollection是一个类,其类型为T Result列表, T可以为int 。 现在,我想抓住那些扔掉并保留其余部分的人。 所以我首先将它作为JObject的集合提取,然后在try-catch中逐个解析它们。 var jObjectsMyCollection = await httpContent.ReadAsAsync<MyCollection>( mediaTypeFormatters, cancellationToken); foreach (var j in jObjectsMyCollection.Results) { try { // now let’s parse j one by one 问题是 我不能这样做,即使使用相同的格式化程序: 这只是反序列化4.5到4并且不抛出: var jsonSerializer = JsonSerializer.Create(myMediaTypeFormatters.JsonFormatter.SerializerSettings); j.ToObject(jsonSerializer) 与此相同: var ser = myMediaTypeFormatters.JsonFormatter.CreateJsonSerializer(); tObjects.Add(ser.Deserialize(j.CreateReader())); 为了记录,在不同的两个不同的格式化程序设置如下: […]

你怎么能在网页上编辑有效的XML?

我必须启动并运行快速而肮脏的配置编辑器。 流程如下: 配置(服务器上的POCO)序列化为XML。 此时XML已经很好地形成了。 配置将发送到XElements中的Web服务器。 在Web服务器上,XML(是,全部IT)被转储到textarea中进行编辑。 用户直接在网页中编辑XML并单击“提交”。 在响应中,我检索XML配置的更改文本。 此时,所有转义都已通过在网页中显示它们的过程恢复。 我尝试将字符串加载到XML对象(XmlElement,XElement,等等)。 KABOOM。 问题是序列化会转义属性字符串,但在转换过程中会丢失。 例如,假设我有一个具有正则表达式的对象。 以下是Web服务器的配置: 所以,我把它放到textarea中,它对用户来说是这样的: <Validator Expression="[^ 因此,用户稍作修改并将更改提交回来。 在Web服务器上,响应字符串如下所示: <Validator Expression="[^ 因此,用户添加了另一个validation器,现在BOTH具有非法字符的属性。 如果我尝试将其加载到任何XML对象中,它会抛出exception,因为<和&在文本字符串中无效。 我不能不能使用任何类型的编码功能,因为它编码整个血腥的东西: var result = Server.HttpEncode(editedConfig); 结果是 <Configuration> <Validator Expression=”[^<]” /> <Validator Expression=”[^&]” /> </Configuration> 这不是有效的XML。 如果我尝试将其加载到任何类型的XML元素中,我将会被一个下降的铁砧击中。 我不喜欢掉落的铁砧。 那么,问题仍然存在……我是否可以通过使用正则表达式替换来获得解析为XML对象的XML字符串的唯一方法? 我加载时有没有办法“关闭约束”? 你怎么绕过这个? 最后一个回应,然后维护这个,因为我认为没有一个有效的答案。 我在textarea中放置的XML是有效的,转义的XML。 1)将其放入文本区域的过程2)将其发送给客户端3)将其显示给客户端4)提交表单,然后将其发送回服务器,以及6)从表格REMOVES中检索值任何和所有逃脱。 让我再说一遍:我不会逃避任何事情。 只需在浏览器中显示它就可以了! 需要考虑的事项:有没有办法防止这种无法逃避的事情发生在一开始? 有没有办法采用几乎有效的XML并以安全的方式“清理”它? 这个问题现在有了它的赏金。 要收集赏金,您将演示如何在浏览器窗口中编辑VALID XML而不使用第三方/开源工具,该工具不需要我使用正则表达式手动转义属性值,这不需要用户转义其属性,并且在往返时不会失败(&amp; amp; amp; […]

自定义XML序列化 – 包括类名

我正在使用以下XML序列化输出: 1.0 Hello! 我有以下课程: [Serializable] public class Message { public string Version { get; set; } public T Body { get; set; } } [Serializable] public class ExampleObject { public string EmampleOne { get; set; } } 如果我将它们单独序列化,我得到: 1.0 Hello! 和: Hello! 所以如上所示,我希望内部主体包含类名 。 我使用generics,因为我需要有不同的Message Body,我用代码序列化: var obj = new Message { Version = “1.0”, […]

使用NewtonSoft将JSON对象反序列化为.Net对象

我有一个json对象,我想反序列化到它的.Net类型而不用它。 我想我在doc中的某处读到你可以将一个属性传递给json,告诉反序列化器它可以尝试强制转换的.Net对象类型。 我找不到我读到的地方。 我想避免使用 var myNewObject = JsonConvert.DeserializeObject(json); 得到这样的东西 MyClass myNewObject = JsonConvert.DeserializeObject(json); 我从HttpRequest获取了我的json对象,并希望从这个嵌套对象中实例化相应的类。 目前对已知项目的反序列化工作良好,但需要更灵活的东西,而无需从解析方法管理所有已知的Object。

使用C#将函数序列化为json中的参数

我正在尝试使用C#创建在jQuery中创建对象所需的json。 json需要的是 { title: ‘title text’, upperVal: 40, lowerVal: 5, mouseover: function() { return ‘difference ‘ + (upperVal – lowerVal); } } 前几个元素很简单。 我创建了一个表示对象JSObj的类,然后通过JavascriptSerializer.Serialize()运行它 public class JSObj { public string title { get; set; } public int upperVal { get; set; } public int lowerVal { get; set; } } 这适用于前几个属性,但我不知道如何返回正确的鼠标hoverfunction。 编辑:提供的代码只是示例代码,因为我实际使用的json的结构有点复杂。 我正在使用HighCharts,我真正需要使用的配置选项之一需要一个function,即使它们不是真正有效的json( http://www.highcharts.com/ref/#tooltip–formatter )所以不幸的是我无法避免这个问题

ISizableizable没有属性做什么?

可能重复: 使用Serializable属性和实现ISerializable有什么区别? 使用Serializable标记类的Serializable是什么? 例如: [Serializable] public Hashtable { } 它与实现ISerializable的类有什么不同? 例如: public Hashtable : ISerializable { } 那么将类标记为Serializable并实现ISerializable会有什么不同? 例如: [Serializable] public Hashtable : ISerializable { } [Serializable]与ISerializable相反的目的是什么? tl;博士 :什么是[Serializable] ?

Json.net反序列化嵌套字典

我正在使用Json.NET反序列化包含嵌套字典的对象。 以下是我想要做的一个示例 public interface IInterface { String Name { get; set; } } public class AClass : IInterface { public string Name { get; set; } } public class Container { public Dictionary Map { get; set; } public Container() { Map = new Dictionary(); } } public static void Main(string[] args) { var container […]

JSON:c#中的java Map等价物是什么

我面临的问题是使用JSON将对象传递给C#并且C#将字符串传递回Java,然后java将其反序列化为Map BTW,.net版本为3.5 这是问题所在 java map JSON字符串采用以下格式: {“key1″:”value1″,”key2″:”value2”} 但在C#中,字典被封为 [{“Key”:”key1″,”Value”:”value1″},{“Key”:”key2″,”Value”:”value2″}] 我只是想找到一种方法来做到这一点: 对于java Map JSON格式,C#可以对其进行解除分类 对于C#,找到一种方法将其seledize为java可理解的格式 谢谢

Json.Net反序列化构造函数与属性规则

我正在使用Json.Net解决以下类的(反)序列化问题: public class CoinsWithdrawn { public DateTimeOffset WithdrawlDate { get; private set; } public Dictionary NumberOfCoinsByType { get; private set; } public CoinsWithdrawn(DateTimeOffset withdrawDate, Dictionary numberOfCoinsByType) { WithdrawlDate = withdrawDate; NumberOfCoinsByType = numberOfCoinsByType; } } 问题是构造函数参数“withdrawDate”的名称与属性名称“WithDrawlDate”不同。 使名称匹配(甚至忽略大小写)修复了问题。 但是,我想要更好地理解这一点,所以我恢复了代码并在将两个setter公之后进行了测试。 这也解决了这个问题。 最后,我从自动属性切换到具有支持字段的属性,以便我可以完全调试并查看实际发生的情况: public class CoinsWithdrawn { private DateTimeOffset _withdrawlDate; private Dictionary _numberOfCoinsByType; public DateTimeOffset WithdrawlDate { get […]

对象序列化 – 从C#或java到Objective C

服务器端 – C#或java 客户端目标C. 我需要一种在C#\ java中序列化对象的方法,并在Objective C中对其进行反序列化。我是Objective C的新手,我想知道在哪里可以获得有关此问题的信息。 谢谢。