public void SerializeNullableDateTimeClass() { NullableDateTimeTestClass t = new NullableDateTimeTestClass() { DateTimeField = null, DateTimeOffsetField = null }; JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); string result; result = JsonConvert.SerializeObject(t, converter); Assert.AreEqual( @"{""PreField"":null,""DateTimeField"":null,""DateTimeOffsetField"":null,""PostField"":null}", result ); t = new NullableDateTimeTestClass() { DateTimeField = new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Utc), DateTimeOffsetField = new DateTimeOffset(2000, 12, 15, 22, 11, 3, 55, TimeSpan.Zero) }; result = JsonConvert.SerializeObject(t, converter); Assert.AreEqual( @"{""PreField"":null,""DateTimeField"":new Date(976918263055),""DateTimeOffsetField"":new Date(976918263055),""PostField"":null}", result ); }
public void DeserializeDateTime_MultipleArguments() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); DateTime result; result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11)", converter); Assert.AreEqual(new DateTime(2000, 12, 1, 0, 0, 0, 0, DateTimeKind.Utc), result); result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11, 12)", converter); Assert.AreEqual(new DateTime(2000, 12, 12, 0, 0, 0, 0, DateTimeKind.Utc), result); result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11, 12, 20)", converter); Assert.AreEqual(new DateTime(2000, 12, 12, 20, 0, 0, 0, DateTimeKind.Utc), result); result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11, 12, 20, 1)", converter); Assert.AreEqual(new DateTime(2000, 12, 12, 20, 1, 0, 0, DateTimeKind.Utc), result); result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11, 12, 20, 1, 2)", converter); Assert.AreEqual(new DateTime(2000, 12, 12, 20, 1, 2, 0, DateTimeKind.Utc), result); result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11, 12, 20, 1, 2, 3)", converter); Assert.AreEqual(new DateTime(2000, 12, 12, 20, 1, 2, 3, DateTimeKind.Utc), result); result = JsonConvert.DeserializeObject <DateTime>("new Date(2000, 11, 1, 0, 0, 0, 0)", converter); Assert.AreEqual(new DateTime(2000, 12, 1, 0, 0, 0, 0, DateTimeKind.Utc), result); }
/// <summary> /// 公共处理post请求 /// </summary> /// <typeparam name="T">请求参数对象</typeparam> /// <typeparam name="T1">返回的data对象</typeparam> /// <param name="host">主机名</param> /// <param name="url">请求地址</param> /// <param name="param">请求参数对象</param> /// <param name="timeout">超时时间,单位:秒,默认为30秒</param> /// <returns>返回对象</returns> public static ReturnBody <T1> CommonHttpRequestForPost <T, T1>(string host, string url, T param, int timeout = 30) { try { Guid guid = Guid.NewGuid(); WipLogHelper.WriteRequestRecord <T>(host, url, param, guid); JavaScriptDateTimeConverter convert = new JavaScriptDateTimeConverter(); var strParam = JsonConvert.SerializeObject(param, Formatting.None, convert);//序列化后的字符串 string content = new HTTPHelper(host).postContentForString(url, strParam, new Guid(), timeout); WipLogHelper.WriteRequestRecord <T>(host, url, param, guid, content); if (!string.IsNullOrEmpty(content)) { ReturnBody <T1> result = JsonConvert.DeserializeObject <ReturnBody <T1> >(content); if (result != null) { return(result); } } } catch (Exception) { throw; } return(null); }
private void BuildInvertedIndex(JToken token, string id, string pathSoFar) { if (token.Type == JTokenType.Object) { foreach (KeyValuePair <string, JToken> kv in (JObject)token) { if (kv.Key == "_attachments") { continue; } string indexKey = pathSoFar + "[\"" + kv.Key + "\"]"; this.BuildInvertedIndex(kv.Value, id, indexKey); } } else if (token.Type == JTokenType.Array) { JArray array = (JArray)token; if (array.HasValues) { int index = 0; foreach (JToken elem in array) { string indexKey = pathSoFar + "[" + index + "]"; this.BuildInvertedIndex(elem, id, indexKey); index++; } } } else if (token.Type == JTokenType.Integer || token.Type == JTokenType.Float || token.Type == JTokenType.Boolean) { this.AddToInvertedIndex(new SqlKeyValueQueryBuilder(pathSoFar, token.ToString().ToLower()), id); } else if (token.Type == JTokenType.String) { string tokenStr = token.ToString().Replace("\"", "\\\""); this.AddToInvertedIndex(new SqlKeyValueQueryBuilder(pathSoFar, "\"" + tokenStr + "\""), id); } else if (token.Type == JTokenType.Null) { this.AddToInvertedIndex(new SqlKeyValueQueryBuilder(pathSoFar, "/null"), id); } else if (token.Type == JTokenType.Date) { // Convert the JToken to raw string format. Serializer reutrns a strign of form "new Date(13234820394)". // We need to make it to "/Date(13234820394)/ JavaScriptDateTimeConverter dateTimeConverter = new JavaScriptDateTimeConverter(); string jsonString = JsonConvert.SerializeObject(token, dateTimeConverter); this.AddToInvertedIndex(new SqlKeyValueQueryBuilder(pathSoFar, "/\"/" + jsonString.Substring(4) + "/\""), id); } else { string errorMessage = String.Format("Unknown type: {0}, token: {1}", token.Type, token.ToString()); Debug.Assert(false, errorMessage); throw new NotSupportedException(errorMessage); } }
public void DeserializeDateTime() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); DateTime result = JsonConvert.DeserializeObject <DateTime>("new Date(976918263055)", converter); Assert.AreEqual(new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Utc), result); }
public void DeserializeDateTime_NotClosed() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); ExceptionAssert.Throws <JsonSerializationException>(() => { JsonConvert.DeserializeObject <DateTime>("new Date(2, 3", converter); }, "Unexpected end when reading date constructor. Path '[1]', line 1, position 13."); }
public void DeserializeDateTime_NoArguments() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); ExceptionAssert.Throws <JsonSerializationException>(() => { JsonConvert.DeserializeObject <DateTime>("new Date()", converter); }, "Date constructor has no arguments. Path '', line 1, position 10."); }
public void DeserializeDateTime_TooManyArguments() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); ExceptionAssert.Throws <JsonSerializationException>(() => { JsonConvert.DeserializeObject <DateTime>("new Date(1, 2, 3, 4, 5, 6, 7, 8)", converter); }, "Unexpected number of arguments when reading date constructor. Path '', line 1, position 32."); }
public void SerializeDateTimeOffset() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); DateTimeOffset now = new DateTimeOffset(2000, 12, 15, 22, 11, 3, 55, TimeSpan.Zero); string result; result = JsonConvert.SerializeObject(now, converter); Assert.AreEqual("new Date(976918263055)", result); }
public void SerializeDateTime() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); DateTime d = new DateTime(2000, 12, 15, 22, 11, 3, 55, DateTimeKind.Utc); string result; result = JsonConvert.SerializeObject(d, converter); Assert.AreEqual("new Date(976918263055)", result); }
public void DeserializeDateTimeOffset() { JavaScriptDateTimeConverter converter = new JavaScriptDateTimeConverter(); DateTimeOffset start = new DateTimeOffset(2000, 12, 15, 22, 11, 3, 55, TimeSpan.Zero); string json = JsonConvert.SerializeObject(start, converter); DateTimeOffset result = JsonConvert.DeserializeObject <DateTimeOffset>(json, converter); Assert.AreEqual(new DateTimeOffset(2000, 12, 15, 22, 11, 3, 55, TimeSpan.Zero), result); }
static SheepJaxed() { var dateTimeConverter = new JavaScriptDateTimeConverter(); DefaultJsonConverterFactories = new List <Func <ControllerContext, JsonConverter> > { _ => dateTimeConverter, _ => new ViewResultWrapperConverter(), context => new ViewResultConverter(context) }; }
/// <summary> /// 有时区偏差,用来确定时间格式的变量足够了 /// </summary> /// <param name="datetimestring"></param> /// <returns></returns> public static string GetJsonDateTimeString(DateTime datetimestring) { string ret = ""; try { JavaScriptDateTimeConverter convert = new JavaScriptDateTimeConverter(); ret = JsonConvert.SerializeObject(datetimestring, Formatting.None, convert); ret = "/" + ret.Remove(0, 4) + "/"; } catch (Exception ex) { throw ex; } return(ret); }
public JsonSerializer() { _settings = new JsonSerializerSettings(); // NOTE: no idea whether we really need all this? // though this is what the serializer in Core uses... var javaScriptDateTimeConverter = new JavaScriptDateTimeConverter(); _settings.Converters.Add(javaScriptDateTimeConverter); _settings.Converters.Add(new EntityKeyMemberConverter()); _settings.Converters.Add(new KeyValuePairConverter()); _settings.Converters.Add(new ExpandoObjectConverter()); _settings.Converters.Add(new XmlNodeConverter()); _settings.NullValueHandling = NullValueHandling.Include; _settings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; _settings.TypeNameHandling = TypeNameHandling.Objects; //_settings.TypeNameHandling = TypeNameHandling.None; _settings.ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor; }
public JsonConverter GetDefaultDateTimeConverter() { string dateFormat = this.DateFormat; JsonConverter converter; switch (dateFormat.ToLower()) { case "js": case "javascript": converter = new JavaScriptDateTimeConverter(); break; case "iso": converter = new IsoDateTimeConverter(); break; default: converter = null; break; } return(converter); }
public JsonNetSerializer() { _settings = new JsonSerializerSettings(); //var customResolver = new CustomIgnoreResolver // { // DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.Public // }; //_settings.ContractResolver = customResolver; var javaScriptDateTimeConverter = new JavaScriptDateTimeConverter(); _settings.Converters.Add(javaScriptDateTimeConverter); _settings.Converters.Add(new EntityKeyMemberConverter()); _settings.Converters.Add(new KeyValuePairConverter()); _settings.Converters.Add(new ExpandoObjectConverter()); _settings.Converters.Add(new XmlNodeConverter()); _settings.NullValueHandling = NullValueHandling.Include; _settings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; _settings.TypeNameHandling = TypeNameHandling.Objects; _settings.ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor; }