我们的客户想要在浏览器中显示date和时间值,就像它们在数据库中一样,我们将它们作为UTC存储在数据库中。 起初我们在序列化和Javascript方面有一些问题。 DateTime值被移位两次 – 首先匹配机器的本地时区,然后匹配浏览器中的时区。 我们通过向JavaScriptSerializer添加自定义Converter来修复它。 我们将DateTime标记为Serialize覆盖中的DateTimeKind.Utc。 从Serialize中反馈数据有点困难,但是我们发现了一些Uri破解,这有助于在相同的JavaScriptSerializer / Date(286769410010)/格式中返回DateTime值,但不会转移到本地时间。 在Javascript方面,我们修补了KendoUI JS库来抵消构造的Date()对象,使它们看起来好像是UTC一样。 然后我们开始在另一边工作,反序列化。 再一次,我们不得不调整我们的代码来使用自定义string,而不是JSON.stringify,当从本地时间转换为UTC时再次偏移数据。 一切似乎都很好。 但看看这个testing: public void DeserialiseDatesTest() { var dateExpected = new DateTime(1979, 2, 2, 2, 10, 10, 10, DateTimeKind.Utc); // this how the Dates look like after serializing // anothe issue, unrelated to the core problem, is that the "\" might get […]
我从ScriptService的WebMethod返回的每个对象都被包装到一个JSON对象中,数据在一个名为d的属性中。 没关系。 但我不想额外的__type属性被提供给客户端,因为我用jQuery手动处理。 可能吗?
简介 :如何使用JavaScriptSerializer.Deserialize将JSON数据中的字段名称映射到.Net对象的字段名称? 更长的版本 :我有以下JSON数据来自我的服务器API(不用.Net编码) {"user_id":1234, "detail_level":"low"} 我有以下的C#对象: [Serializable] public class DataObject { [XmlElement("user_id")] public int UserId { get; set; } [XmlElement("detail_level")] public DetailLevel DetailLevel { get; set; } } 其中DetailLevel是具有“Low”作为其中一个值的枚举。 此testing失败: [TestMethod] public void DataObjectSimpleParseTest() { JavaScriptSerializer serializer = new JavaScriptSerializer(); DataObject dataObject = serializer.Deserialize<DataObject>(JsonData); Assert.IsNotNull(dataObject); Assert.AreEqual(DetailLevel.Low, dataObject.DetailLevel); Assert.AreEqual(1234, dataObject.UserId); } 最后两个断言失败,因为这些字段中没有数据。 如果我将JSON数据更改为 {"userid":1234, "detaillevel":"low"} […]
我有一个包含enum属性的类,并在使用JavaScriptSerializer序列化对象时,我的json结果包含枚举的整数值而不是其string “name”。 有没有办法让我的JSON中的string枚举,而不必创build一个自定义JavaScriptConverter ? 也许有一个属性,我可以装饰的枚举定义,或对象的财产,与? 举个例子: enum Gender { Male, Female } class Person { int Age { get; set; } Gender Gender { get; set; } } 期望的json结果: { "Age": 35, "Gender": "Male" }