Tag: json.net

使用JSON.NET解析格式为Date(epochTime-offset)的json日期

我在C#中使用Json.net 7.0.1来使用rest API。 问题在于API在其JSON响应中使用的日期格式。 它看起来像这样: /Date(1445301615000-0700)/ 这意味着代表2015-10-19 17:40:15的UTC时间 如果将1445301615000插入纪元时间转换器 ,您会看到它是2015-10- 20 00:40:15。 所以比UTC提前7个小时。 然后他们包括-0700可能是为了抵消回到UTC。 所以,为了给我一个UTC时间,他们发给我UTC + 7-0700。 为什么他们这样做我不知道,但我不能改变它。 我的问题是,如何最好地使Json.NET解析该日期字符串并提出2015-10-19 17:40:15 UTC的DateTime。 我可以编写一个自定义JsonConverter来劫持该值并手动操作它,但我想知道是否有更原生的方法。 我已经尝试将JsonSerializerSettings DateTimeZoneHandling属性更改JsonSerializerSettings DateTimeZoneHandling所有不同的值。 将它设置为Utc只是忽略时区偏移,产生2015-10-20 00:40:15 。 将其设置为Local,Unspecified或2015-10-19 20:40:15都会产生2015-10-19 20:40:15 ,我认为这是因为我的本地时区是UTC-4,所以它试图将该调整应用于2015年的主要日期值-10-20 00:40 我还考虑使用DateFormatString属性来表示预期的日期字符串格式。 但我找不到正确的格式字符串字符来表示这个epochtime-offset格式。 这是一个简化的例子: Person person; string json = @”{ ‘Name’: ‘John’, ‘LastSeen’:’/Date(1445301615000-0700)/’ }”; // 1445301615000 = 2015-10-20 00:40:15 person = JsonConvert.DeserializeObject(json); Console.WriteLine(person.LastSeen); […]

Json.NET区分大小写的反序列化

是否可以指定一些反序列化选项来使用Json.NET执行区分大小写的反序列化? 建议: public class Account { public string Email { get; set; } public bool Active { get; set; } public DateTime CreatedDate { get; set; } public IList Roles { get; set; } } 从反序列化时必须失败: { “email”: “james@example.com”, “active”: true, “createdDate”: “2013-01-20T00:00:00Z”, “roles”: [ “User”, “Admin” ] }

序列化时出现JSON .Net Windows Mobile错误

我正在运行这段代码: string serialized = JsonConvert.SerializeObject(somethingToSend); 它抛出了这个exception: MissingMethodException:无法从程序集’mscorlib,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 969DB8053D3322AC’加载类型’System.Runtime.Serialization.StreamingContext’。 这是我的配置: Visual Studio 2008(包含所有最新的服务包等) 针对Windows Mobile 6 .Net 3.5的智能设备项目 Json DotNet 4.5版第7版(从zip中的WindowsPhone文件夹引用DLL) 这个问题的答案“ 在Windows Mobile上有没有可以在C#中读取JSON的库? ”意味着它应该可以工作。 我在调试中运行它与附加的真实设备(所以没有模拟器)我以前从这里安装了CAB文件而没有错误: C:\ Program Files(x86)\ Microsoft.NET \ SDK \ CompactFramework \ v3.5 \ WindowsCE \ NETCFv35.wce.armv4.cab 应用程序运行正常,直到我点击运行上面一行的按钮,所以有人知道我缺少什么吗? 这个post“ 用于Windows CE 5.0的Json.Compact.dll? ”表明我需要安装Windows SDK,我有。 鉴于它在设备上运行,我想这无论如何都不会是修复。 另一个建议是从源代码构建,但像问题的作者一样,我无法将项目文件加载到VS 2008中来执行此操作。 我可以创建一个新项目并包含源文件并尝试将其编译,但在我这样做之前,我想我会问这里是否值得,或者设备上的安装是否还有其他东西丢失? […]

Json.NET通过引用反序列化为动态对象

如何让Json.NET反序列化为动态对象,但仍然可以进行参考分辨率? dynamic d=JsonConvert.DeserializeObject(…)就像 dynamic d=JsonConvert.DeserializeObject(…)返回一个动态对象但它们不解析$ref和$id部分。 (例如, ExpandoObject eo只有eo[“$ref”]=”…” ,并且没有它应该具有的属性,因为它与$id -Object不同 我发现的是我需要合同解析器解析为动态合同 – 只有在我明确告诉Json.NET使用自定义ContractResolver , ExpandoObject才会这样做。 仍然看起来ExpandoObject是用它自己的Converter解析的,它再次失败。 我尝试过inheritance自IDynamicMetaObjectProvider的自定义类,导致无限循环,看起来不是正确的事情。 我实际上期望一些简单的解决方案让ExpandoObject具有参考分辨率。 有帮助吗?

Null-coalescing运算符为动态对象的属性返回null

我最近在使用Json.NET将JSON解析为动态对象时发现了null-coalescing运算符的问题。 假设这是我的动态对象: string json = “{ \”phones\”: { \”personal\”: null }, \”birthday\”: null }”; dynamic d = JsonConvert.DeserializeObject(json); 如果我尝试使用?? 运算符在d的一个字段上,它返回null: string s = “”; s += (d.phones.personal ?? “default”); Console.WriteLine(s + ” ” + s.Length); //outputs 0 但是,如果我将动态属性分配给字符串,那么它可以正常工作: string ss = d.phones.personal; string s = “”; s += (ss ?? “default”); Console.WriteLine(s + ” ” […]

在Newtonsoft.json中,ReferenceLoopHandling.Ignore究竟做了什么?

任何人都可以向我展示可以使用它的场景。 我通过ReferenceLoopHandling.Ignore理解的是,如果你有一个对象A引用对象B和B引用C和C再次引用A(A-> B-> C-> A),那么在序列化时,它将最终无穷无尽在C和A之间循环,可以使用下面的方法避免。 我对吗? JsonConvert.SerializeObject(data, Formatting.Indented, new JsonSerializerSetting() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore } )); 我有自我引用循环问题,通过使用上面的问题得到解决,但我想知道它正在做什么,因为上面的行是应用程序的关键(关键肉)

我怎样才能在C#中反序列化json中的表情符号

我有一个包含表情符号的json文件,当我想反序列化时,它无法将表情符号反序列化为字符串。 我的代码是: var mystring ={“message”:”jjasdajdasjdj laslla aasdasd ssdfdsf!!! 🙌\u{1F3FD}”, “updated_time”:”2015-04-14T22:37:13+0000″, “id”:”145193995506_148030368559″} FaceBookIdea ideaDetails = JsonConvert.DeserializeObject((mystring).ToString()); 错误是: {“Input string was not in a correct format.”} 当我删除表情符号时,它运作良好。 非常感谢你的帮助

Json.NET + VerificationException操作可能会破坏运行时的稳定性

我得到“操作可能会破坏运行时exception”。 我瞪大了一下,看起来exception与在运行时加载的冲突程序集有关。 所以,这里有几件事 相同的源代码在我的同事机器上工作。 我查看并搜索了对NewtonSoft.Json.dll的每个引用,看起来它来自同一个程序集。 (我认为这不会是一个问题,因为它在其他人机器上工作)。 我使用的是引用NewtonSoft的Raven,但它仅在客户端/ silverlight端的服务器端使用。 同样兼容我引用了raven引用的相同版本的Newtonsoft。 现在,问题可能是我在机器中安装了影响它的问题。 一些运行时/ SP安装等。有没有办法调试/弄清楚这里发生了什么。 当应用程序运行时,我查看并搜索了NewtonSoft.dll,它在临时的asp.net文件中获得了正确的版本。 ? 任何帮助都可以非常感谢。 我不想安装我的运行时。

Json.NET中的JConstructor和JRaw

根据StackOverflow上的这个答案: Json.NET包含许多不属于JSON规范的function。 特别是,它允许解析一些“正式”无效的JSON文件。 这包括不带引号的属性,注释,构造函数等。 这些是从JToken分配的所有类型: JArray JConstructor JContainer JObject JProperty JRaw JValue 请告诉我们以下是否属实: “正式”有效的json上的JToken.Parse(json)在其后代中包含JConstructor或JRaw 。 如果json是“正式”有效的,那么在这些后代中只能看到以下类型: JArray , JObject , JProperty , JValue 。

使用匹配的花括号拆分字符串的最佳方法

我正在使用C#,我正在使用JSON.Net将json字符串解析为C#对象。 我的部分问题是我得到了一些像这样的字符串: {“name”: “John”}{“name”: “Joe”} 当我尝试使用JsonConvert.DeserializeObject反序列化时,它会抛出exception。 我想知道将这个更大的字符串拆分成更小的json字符串的最佳方法是什么。 我正在考虑通过字符串和匹配“0级”的花括号。 这看起来是个好主意吗? 或者有更好的方法来做到这一点?