/// <summary> /// Serializes the specified <paramref name="source"/> to an object of <see cref="string"/>. /// </summary> /// <param name="source">The object to serialize to JSON format.</param> /// <param name="sourceType">The type of the object to serialize.</param> /// <returns>A string of the serialized <paramref name="source"/>.</returns> /// <remarks>This method will serialize, in the order specified, using one of either:<br/> /// 1. the explicitly defined <see cref="JsonFormatterOptions.WriterFormatter"/> delegate<br/> /// 2. the implicit or explicit defined delegate in <see cref="JsonFormatterOptions.WriterFormatters"/> dictionary<br/> /// 3. if neither was specified, a default JSON writer implementation will be used on <see cref="JsonConverter"/>. /// </remarks> public override Stream Serialize(object source, Type sourceType) { Validator.ThrowIfNull(source, nameof(source)); Validator.ThrowIfNull(sourceType, nameof(sourceType)); var converter = Options.Converter; if (converter == null) { var formatter = Options.ParseWriterFormatter(sourceType); converter = DynamicJsonConverter.Create(sourceType, Options.Settings, formatter); } var serializer = JsonSerializer.Create(Options.Settings); // there is a bug in the JsonConvert.SerializeObject, why we had to make our own implementation serializer.Converters.Add(converter); return(StreamWriterUtility.CreateStream(writer => { using (JsonTextWriter jsonWriter = new JsonTextWriter(writer)) { jsonWriter.CloseOutput = false; jsonWriter.Formatting = serializer.Formatting; serializer.Serialize(jsonWriter, source, sourceType); } })); }
/// <summary> /// Adds a <see cref="TimeSpan"/> JSON converter to the list. /// </summary> /// <param name="converters">The list of JSON converters.</param> public static void AddTimeSpanConverter(this ICollection <JsonConverter> converters) { converters.Add(DynamicJsonConverter.Create((writer, ts) => { writer.WriteStartObject(); writer.WritePropertyName("ticks", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.Ticks); writer.WritePropertyName("days", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.Days); writer.WritePropertyName("hours", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.Hours); writer.WritePropertyName("minutes", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.Minutes); writer.WritePropertyName("seconds", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.Seconds); writer.WritePropertyName("totalDays", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.TotalDays); writer.WritePropertyName("totalHours", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.TotalHours); writer.WritePropertyName("totalMilliseconds", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.TotalMilliseconds); writer.WritePropertyName("totalMinutes", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.TotalMinutes); writer.WritePropertyName("totalSeconds", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(ts.TotalSeconds); writer.WriteEndObject(); }, (reader, ts) => reader.ToHierarchy().UseTimeSpanFormatter())); }
/// <summary> /// Adds an <see cref="Exception" /> JSON converter to the list. /// </summary> /// <param name="converters">The list of JSON converters.</param> /// <param name="includeStackTraceFactory">The function delegate that is invoked when it is needed to determine whether the stack of an exception is included in the converted result.</param> public static void AddExceptionConverter(this ICollection <JsonConverter> converters, Func <bool> includeStackTraceFactory) { converters.Add(DynamicJsonConverter.Create <Exception>((writer, exception) => { WriteException(writer, exception, includeStackTraceFactory?.Invoke() ?? false); })); }
/// <summary> /// Adds an <see cref="HttpExceptionDescriptor"/> JSON converter to the list. /// </summary> /// <param name="converters">The list of JSON converters.</param> /// <param name="setup">The <see cref="ExceptionDescriptorSerializationOptions"/> which need to be configured.</param> public static void AddHttpExceptionDescriptorConverter(this ICollection <JsonConverter> converters, Action <ExceptionDescriptorSerializationOptions> setup = null) { var options = setup.ConfigureOptions(); converters.Add(DynamicJsonConverter.Create <HttpExceptionDescriptor>((writer, descriptor) => { writer.WriteStartObject(); writer.WritePropertyName("error", () => DynamicJsonConverter.UseCamelCase); writer.WriteStartObject(); writer.WritePropertyName("status", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(descriptor.StatusCode); writer.WritePropertyName("code", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(descriptor.Code); writer.WritePropertyName("message", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(descriptor.Message); if (descriptor.HelpLink != null) { writer.WritePropertyName("helpLink", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(descriptor.HelpLink.OriginalString); } if (options.IncludeFailure) { writer.WritePropertyName("failure", () => DynamicJsonConverter.UseCamelCase); writer.WriteObject(descriptor.Failure); } writer.WriteEndObject(); if (options.IncludeEvidence && descriptor.Evidence.Any()) { writer.WritePropertyName("evidence", () => DynamicJsonConverter.UseCamelCase); writer.WriteStartObject(); foreach (var evidence in descriptor.Evidence) { writer.WritePropertyName(evidence.Key, () => DynamicJsonConverter.UseCamelCase); writer.WriteObject(evidence.Value); } writer.WriteEndObject(); } if (!descriptor.CorrelationId.IsNullOrWhiteSpace()) { writer.WritePropertyName("correlationId", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(descriptor.CorrelationId); } if (!descriptor.RequestId.IsNullOrWhiteSpace()) { writer.WritePropertyName("requestId", () => DynamicJsonConverter.UseCamelCase); writer.WriteValue(descriptor.RequestId); } writer.WriteEndObject(); })); }
/// <summary> /// Adds an <see cref="DataPair" /> JSON converter to the list. /// </summary> /// <param name="converters">The list of JSON converters.</param> public static void AddDataPairConverter(this ICollection <JsonConverter> converters) { converters.Add(DynamicJsonConverter.Create <DataPair>((writer, dp) => { writer.WriteStartObject(); writer.WritePropertyName("name"); writer.WriteValue(dp.Name); if (dp.HasValue) { var value = (dp.Type == typeof(Uri)) ? dp.Value.As <Uri>().OriginalString : dp.Value; writer.WritePropertyName("value"); writer.WriteValue(value); } writer.WritePropertyName("type"); writer.WriteValue(dp.Type.ToFriendlyName()); writer.WriteEndObject(); })); }
private async Task <bool> Register() { var retryCount = 0; const int retryMax = 60; const int pauseMilliseconds = 1000; while (retryCount < retryMax) // wait a minute, check each second { var body = "{\"username\": \"" + appname + "\", \"devicetype\":\"" + appname + "\"}"; var responseFromServer = await HttpRestHelper.Post(Urls.GetRegisterUrl(), body); if (responseFromServer.Contains("link button not pressed")) { //responseFromServer = "[{\"error\":{\"type\":7,\"address\":\"/username\",\"description\":\"invalid value, winhueapp, for parameter, username\"}},{\"error\":{\"type\":101,\"address\":\"\",\"description\":\"link button not pressed\"}}]" // link button not pressed, inform on first try only if (retryCount == 0 && PushButtonOnBridge != null) { PushButtonOnBridge(this, null); } Thread.Sleep(pauseMilliseconds); // sleep for a second, then retry retryCount++; } else { dynamic obj = DynamicJsonConverter.Parse(responseFromServer); // sample response: [{"error":{"type":7,"address":"/username","description":"invalid value, WinHueApp, for parameter, username"}},{"success":{"username":"******"}}] string key = obj[1].success.username; if (!string.IsNullOrWhiteSpace(key)) { Settings.Default.BridgeApiKey = key; Settings.Default.Save(); IsAuthenticated = true; return(true); } } } IsAuthenticated = false; return(false); }
public JsonResult GetMenu() { using (BuyunSiteEntities db = new BuyunSiteEntities()) { var strUser = BasePage.GetCookie("UserInfoCookie"); dynamic User = DynamicJsonConverter.ParseJson(strUser); int UserId = User.UserId; if (User.IsAdmin == true) { var Menu = from t in db.Cu_Menu select t; return(Json(new { data = Menu.ToList() })); } else { var Menu = from t in db.Cu_Menu where (int?)("," + ((from a in db.Cu_User join b in db.Cu_UserAuthority on new { AuthorityId = (Int32)a.AuthorityId } equals new { AuthorityId = b.AuthorityId } where a.UserId == UserId select new { b.Authority }).FirstOrDefault().Authority) + ",").ToUpper().IndexOf(("," + t.MenuId.ToString().TrimStart() + ",").ToUpper()) + 1 > 0 select new { t.MenuId, t.FMenuId, t.MenuName, t.Imageicon, t.URLAddress, t.Status, t.AddTime, t.AddUser, t.UpdateTime, t.UpdateUser, t.IsBlank }; return(Json(new { data = Menu.ToList() })); } } }
/// <summary> /// Adds an <see cref="StringValues"/> JSON converter to the list. /// </summary> /// <param name="converters">The list of JSON converters.</param> public static void AddStringValuesConverter(this ICollection <JsonConverter> converters) { converters.Add(DynamicJsonConverter.Create <StringValues>((writer, values) => { if (values.Count <= 1) { writer.WriteValue(values.ToString()); } else { writer.WriteStartArray(); foreach (var value in values) { writer.WriteValue(value); } writer.WriteEndArray(); } })); }
/// <summary> /// Deserializes the specified <paramref name="value" /> into an object of <paramref name="valueType"/>. /// </summary> /// <param name="value">The string from which to deserialize the object graph.</param> /// <param name="valueType">The type of the deserialized object.</param> /// <returns>An object of <paramref name="valueType"/>.</returns> /// <remarks>This method will deserialize, in the order specified, using one of either:<br /> /// 1. the explicitly defined <see cref="JsonFormatterOptions.ReaderFormatter" /> delegate<br /> /// 2. the implicit or explicit defined delegate in <see cref="JsonFormatterOptions.ReaderFormatters" /> dictionary<br /> /// 3. if neither was specified, a default JSON reader implementation will be used.</remarks> public override object Deserialize(Stream value, Type valueType) { var converter = Options.Converter; if (converter == null) { var formatter = Options.ParseReaderFormatter(valueType); converter = DynamicJsonConverter.Create(valueType, Options.Settings, null, formatter); } var serializer = JsonSerializer.Create(Options.Settings); serializer.Converters.Add(converter); using (JsonTextReader reader = new JsonTextReader(new StreamReader(value, true))) { return(serializer.Deserialize(reader, valueType)); } }
/// <summary> /// 处理登录的信息 /// </summary> /// <param name="userInfo"></param> /// <returns></returns> public JsonResult CheckUserLogin(Cu_User userInfo) { using (BuyunSiteEntities db = new BuyunSiteEntities()) { //linq查询 userInfo.UserPassword = BasePage.Md5Hash(userInfo.UserPassword); var users = from p in db.Cu_User where p.UserCode == userInfo.UserCode && p.UserPassword == userInfo.UserPassword select p; if (users.Count() > 0) { string strUser = DynamicJsonConverter.GetJson <Cu_User>(users.FirstOrDefault()); BasePage.WriteCookie("UserNameCookie", users.FirstOrDefault().UserName, 0); BasePage.WriteCookie("UserInfoCookie", strUser, 0); return(Json(new { result = "success", content = "" })); } else { return(Json(new { result = "error", content = "用户名密码错误,请您检查" })); } } }
/// <summary> /// Helper function to deserialize json string into a dynamic object since we don't have datacontract classes to work with. /// </summary> /// <param name="json"></param> /// <returns></returns> protected dynamic GetJsonObject(string json) { DynamicJsonConverter c = new DynamicJsonConverter(); var serializer = new JavaScriptSerializer(); serializer.RegisterConverters(new[] { new DynamicJsonConverter() }); dynamic jsonobj = serializer.Deserialize(json, typeof(object)); return jsonobj; }
public void ParseInputToDocument(object[] inputs) { var insertsList = DynamicJsonConverter.Convert(inputs); var newDocument = new Document(); var templateIdPair = insertsList.FirstOrDefault(x => x.Item1 == "Id"); if (templateIdPair == null) { throw new NullReferenceException(); } var namePair = insertsList.FirstOrDefault(x => x.Item1 == "DocName"); var templateId = int.Parse(templateIdPair.Item2); var template = _templatesHandler.FindById(templateId); newDocument.Type = template.Type; var user = _usersHandler.FindById(_userId); newDocument.User = user; newDocument.Name = namePair.Item2; newDocument.DateTime = DateTime.Now; newDocument.Text = CreateDocumentText(template.Text, insertsList.Where(x => !x.Item1.Contains("*")).ToList()); _documentsHandler.Add(newDocument); var a = ((DocumentsRepositoryHandler)_documentsHandler) .GetUserDocumentByTime(_userId, newDocument.DateTime); newDocument = (_documentsHandler as DocumentsRepositoryHandler) .GetUserDocumentByTime(_userId, newDocument.DateTime); var usersIds = CreateDocumentPath(template.PositionsPath, insertsList.Where(x => x.Item1.Contains("*")).ToList()); if (usersIds == null) { throw new ArgumentNullException(); } var serialNumber = 1; var steps = new List <Step>(); foreach (var id in usersIds) { _stepsHandler.Add( new Step { User = _usersHandler.FindById(id), SerialNumber = serialNumber++, Document = newDocument }); } var firstStep = ((StepsRepositoryHandler)_stepsHandler) .GetDocumentSteps(newDocument.Id) .FirstOrDefault(x => x.SerialNumber == 1); _currentStepsHandler.Add( new CurrentStep { StepId = firstStep.Id, UserId = firstStep.User.Id, DocumentId = newDocument.Id }); }