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);
        }
Beispiel #12
0
        static SheepJaxed()
        {
            var dateTimeConverter = new JavaScriptDateTimeConverter();

            DefaultJsonConverterFactories = new List <Func <ControllerContext, JsonConverter> >
            {
                _ => dateTimeConverter,
                _ => new ViewResultWrapperConverter(),
                context => new ViewResultConverter(context)
            };
        }
Beispiel #13
0
        /// <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);
        }
Beispiel #14
0
        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;
        }
Beispiel #15
0
        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;
        }