public void Write(ISerializerWriter writer, JsonSerializeSetting setting, InvestModel model, byte level) { writer.Write("{"); writer.Write("Amount:"); writer.Write(model.Amount.ToString()); writer.Write("}"); }
/// <summary> /// 写入流中 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="level"></param> /// <param name="array">The array.</param> public virtual void Write(ISerializerWriter writer, JsonSerializeSetting setting, byte level, IEnumerable array) { if (array == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("[]"); } return; } writer.Write("["); var enumerator = array.GetEnumerator(); bool moveNext = enumerator.MoveNext(); while (moveNext) { var item = enumerator.Current; SerialierBuilderHelper.QueryBuilderInvoker(item.GetType())(writer, setting, item, level++); if (moveNext = enumerator.MoveNext()) { writer.Write(","); } } writer.Write("]"); return; }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, Nullable <T> source) { if (source.HasValue) { if (setting.WriteNumberOnEnumType) { if (setting.WriteQuoteWhenObjectIsNumber) { writer.Write("\""); MethodProviders.EnumMethodProvider <T> .Default.Write(writer, setting, source.Value); writer.Write("\""); } else { MethodProviders.EnumMethodProvider <T> .Default.Write(writer, setting, source.Value); } } else { writer.Write("\""); MethodProviders.EnumMethodProvider <T> .Default.Write(writer, setting, source.Value); writer.Write("\""); } return; } writer.Write("null"); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, string source) { /*要进行转义的*/ if (source == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("\"\""); } return; } else if (source.Length == 0) { writer.Write("\"\""); return; } writer.Write("\""); for (var i = 0; i < source.Length; i++) { CharMethodProvider.Default.Write(writer, setting, source[i]); } writer.Write("\""); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, bool?source) { if (source.HasValue) { if (setting.WriteNumberOnBoolenType) { if (setting.WriteQuoteWhenObjectIsNumber) { writer.Write("\""); MethodProviders.BooleanMethodProvider.Default.Write(writer, setting, source.Value); writer.Write("\""); } else { MethodProviders.BooleanMethodProvider.Default.Write(writer, setting, source.Value); } } else { writer.Write("\""); MethodProviders.BooleanMethodProvider.Default.Write(writer, setting, source.Value); writer.Write("\""); } return; } writer.Write("null"); }
/// <summary> /// 比较深度 /// </summary> /// <param name="setting"></param> /// <param name="source"></param> /// <param name="writer"></param> /// <param name="level"></param> /// <returns></returns> internal static bool CallSerializeMaxDepthCompare <T>(ISerializerWriter writer, JsonSerializeSetting setting, T source, byte level) { if (setting.MaxDepth == 0) { return(level <= 100); } return(setting.MaxDepth > level); }
/// <summary> /// 写入流中 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="level"></param> /// <param name="array">The array.</param> public virtual void WriteObjectValue(ISerializerWriter writer, JsonSerializeSetting setting, byte level, IDictionary <Key, object> array) { if (array == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("{}"); } return; } if (array.Count == 0) { writer.Write("{}"); return; } writer.Write("{"); var i = -1; foreach (var a in array) { i++; ZzzZzSerialierBuilder <Key> .Register(setting).Invoke(writer, setting, a.Key, level++); writer.Write(":"); if (a.Value == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("{}"); } } else { SerialierBuilderHelper.QueryBuilderInvoker(a.Value.GetType()).Invoke(writer, setting, a.Value, level++); } if (i < array.Count - 1) { writer.Write(","); } } writer.Write("}"); return; }
private HyperstoreSerializer(IDomainModel domain, SerializationSettings settings) { Contract.Requires(domain, "domain"); _domain = domain; _options = settings.Options; _schema = settings.Schema; _serializer = settings.Serializer; _writer = HasOption(SerializationOptions.Json) ? (ISerializerWriter) new JsonWriter(_options, domain) : new XmlWriter(_options, domain); }
/// <summary> /// 执行builder,反射用到的 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="level"></param> /// <param name="source">The source.</param> internal static void CallObjectBuilderInvoke(ISerializerWriter writer, JsonSerializeSetting setting, object source, byte level) { if (source == null) { writer.Write("null"); return; } QueryBuilderInvoker(source.GetType()).Invoke(writer, setting, source, level++); }
/// <summary> /// 执行builder,反射用到的 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="level"></param> /// <param name="source">The source.</param> internal static void CallNullablePrimitiveBuilderInvoke <T>(ISerializerWriter writer, JsonSerializeSetting setting, Nullable <T> source, byte level) where T : struct { if (!source.HasValue) { writer.Write("null"); return; } ZzzZzSerialierBuilder <T> .Register(setting).Invoke(writer, setting, source.Value, level); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, long source) { if (source == long.MinValue) { writer.Write("-9223372036854775808"); return; } if (source == long.MaxValue) { writer.Write("9223372036854775807"); return; } var target = source; if (source < 0) { writer.Write('-'); target = -target; } char[] buffer = null; /*long的最大长度为19,加一个负数符号*/ var maxlength = "9223372036854775807".Length; buffer = new char[maxlength + 1]; var lessen = 0L; KeyValuePair <char, char> item; do { lessen = target % 100; item = ZeroToHundred[lessen]; buffer[maxlength] = item.Value; buffer[maxlength - 1] = item.Key; maxlength -= 2; target = (target / 100); } while (target != 0); if (item.Key == '0') { writer.Write(buffer, maxlength + 2); return; } writer.Write(buffer, maxlength + 1); return; //var digitlength = GetDigitLength(source); //buffer = new char[digitlength]; //WriteIntoChar(buffer, source, digitlength, 0); //writer.Write(buffer); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source"></param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, DateTime source) { char[] buffer = null; buffer = new char[24]; var item = ZeroToHundred[source.Year % 100]; buffer[2] = item.Key; buffer[3] = item.Value; item = ZeroToHundred[source.Year / 100]; buffer[0] = item.Key; buffer[1] = item.Value; buffer[4] = '-'; item = ZeroToHundred[source.Month]; buffer[5] = item.Key; buffer[6] = item.Value; buffer[7] = '-'; item = ZeroToHundred[source.Day]; buffer[8] = item.Key; buffer[9] = item.Value; buffer[10] = 'T'; item = ZeroToHundred[source.Hour]; buffer[11] = item.Key; buffer[12] = item.Value; buffer[13] = ':'; item = ZeroToHundred[source.Minute]; buffer[14] = item.Key; buffer[15] = item.Value; buffer[16] = ':'; item = ZeroToHundred[source.Second]; buffer[17] = item.Key; buffer[18] = item.Value; buffer[19] = '.'; item = ZeroToHundred[source.Millisecond % 100]; buffer[20] = item.Key; buffer[21] = item.Value; item = ZeroToHundred[source.Millisecond / 100]; buffer[22] = item.Key; buffer[23] = 'Z'; writer.Write(buffer); return; }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, Type source) { if (setting.WriteVersionOnTypeInfo) { writer.Write(source.AssemblyQualifiedName); } else { writer.Write(Regex.Replace(source.AssemblyQualifiedName, "\\s+version=(.*?),", "", RegexOptions.IgnoreCase)); } }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, TimeSpan?source) { if (source.HasValue) { writer.Write("\""); MethodProviders.TimeSpanMethodProvider.Default.Write(writer, setting, source.Value); writer.Write("\""); return; } writer.Write("null"); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, DateTime?source) { if (source.HasValue) { writer.Write("\""); MethodProviders.DateTimes.ChineseStyleDateMethodProvider.Default.Write(writer, setting, source.Value); writer.Write("\""); return; } writer.Write("null"); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, bool source) { if (setting.WriteNumberOnBoolenType) { writer.Write(source ? "1" : "0"); } else { writer.Write(source ? "true" : "false"); } return; }
/// <summary> /// 序列化对象 /// </summary> /// <param name="object">源对象</param> /// <param name="setting">配置</param> /// <param name="writer">写入流</param> /// <returns></returns> private static void Serialize(object @object, JsonSerializeSetting setting, ISerializerWriter writer) { if (@object == null) { writer.Write("null"); return; } var @delegate = SerialierBuilderHelper.QueryBuilderInvoker(@object.GetType()); @delegate(writer, setting, @object, 0); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, byte source) { char[] buffer = new char[3]; var it = ZeroToHundred[source % 100]; buffer[2] = it.Value; buffer[1] = it.Key; if (source < 10) { writer.Write(buffer, 2); return; } if (source < 100) { writer.Write(buffer, 1); return; } buffer[0] = ZeroToHundred[source / 100].Value; writer.Write(buffer); return; //char[] buffer = null; /*ushort的最大长度为5*/ //var maxlength = "255".Length; //buffer = new char[maxlength + 1]; //byte lessen = 0; //Tuple<char, char> item; //do //{ // lessen = (byte)(source % 100); // item = ZeroToHundred[lessen]; // buffer[maxlength] = item.Item2; // buffer[maxlength - 1] = item.Item1; // maxlength -= 2; // source = (byte)(source / 100); //} while (source != 0); //if (item.Item1 == '0') //{ // writer.Write(buffer, maxlength + 2); // return; //} //writer.Write(buffer, maxlength + 1); //return; //var digitlength = GetDigitLength(source); //buffer = new char[digitlength]; //WriteIntoChar(buffer, source, digitlength, 0); //writer.Write(buffer); }
/// <summary> /// 序列化对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="object">源对象</param> /// <param name="setting">配置</param> /// <param name="writer">写入流</param> /// <returns></returns> private static void Serialize <T>(T @object, JsonSerializeSetting setting, ISerializerWriter writer) { /*object*/ if (typeof(T) == typeof(object)) { Serialize((object)@object, setting, writer); return; } var build = ZzzZzSerialierBuilder <T> .Register(setting); build(writer, setting, @object, 0); }
/// <summary> /// 写入流中 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="array">The array.</param> public virtual void WriteString(ISerializerWriter writer, JsonSerializeSetting setting, IEnumerable <T> array) { if (array == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("[]"); } return; } var provider = this.MethodProvider; var list = array as IList <T>; if (list != null) { writer.Write("["); for (var i = 0; i < list.Count; i++) { provider.Write(writer, setting, list[i]); if (i < list.Count - 1) { writer.Write(","); } } writer.Write("]"); return; } writer.Write("["); var enumerator = array.GetEnumerator(); if (enumerator.MoveNext()) { provider.Write(writer, setting, enumerator.Current); } while (enumerator.MoveNext()) { writer.Write(","); provider.Write(writer, setting, enumerator.Current); } writer.Write("]"); return; }
/// <summary> /// 写入流中 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="level"></param> /// <param name="array">The array.</param> public virtual void Write(ISerializerWriter writer, JsonSerializeSetting setting, byte level, IEnumerable <T> array) { if (array == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("[]"); } return; } var list = array as IList <T>; if (list != null) { writer.Write("["); for (var i = 0; i < list.Count; i++) { ZzzZzSerialierBuilder <T> .Register(setting).Invoke(writer, setting, list[i], level++); if (i < list.Count - 1) { writer.Write(","); } } writer.Write("]"); return; } writer.Write("["); var enumerator = array.GetEnumerator(); if (enumerator.MoveNext()) { ZzzZzSerialierBuilder <T> .Register(setting).Invoke(writer, setting, enumerator.Current, level++); } while (enumerator.MoveNext()) { writer.Write(","); ZzzZzSerialierBuilder <T> .Register(setting).Invoke(writer, setting, enumerator.Current, level++); } writer.Write("]"); return; }
/// <summary> /// 写入流中 /// </summary> /// <param name="writer">The writer.</param> /// <param name="setting">The setting.</param> /// <param name="level"></param> /// <param name="array">The array.</param> public virtual void Write(ISerializerWriter writer, JsonSerializeSetting setting, byte level, IDictionary array) { if (array == null) { if (setting.WriteNullWhenObjectIsNull) { writer.Write("null"); } else { writer.Write("{}"); } return; } if (array.Count == 0) { writer.Write("{}"); return; } writer.Write("{"); var enumerator = array.Keys.GetEnumerator(); bool moveNext = enumerator.MoveNext(); while (moveNext) { SerialierBuilderHelper.QueryBuilderInvoker(enumerator.Current.GetType())(writer, setting, enumerator.Current, level++); writer.Write(":"); var item = array[enumerator.Current]; SerialierBuilderHelper.QueryBuilderInvoker(item.GetType())(writer, setting, item, level++); if (moveNext = enumerator.MoveNext()) { writer.Write(","); } } writer.Write("}"); return; }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, ushort?source) { if (source.HasValue) { if (setting.WriteQuoteWhenObjectIsNumber) { writer.Write("\""); MethodProviders.UInt16MethodProvider.Default.Write(writer, setting, source.Value); writer.Write("\""); } else { MethodProviders.UInt16MethodProvider.Default.Write(writer, setting, source.Value); } return; } writer.Write("null"); }
public static void Write(ISerializerWriter writer, JsonSerializeSetting setting, DateTime source) { if (DateTimeFormat.Default.Equals(setting.DateTimeFormat)) { ISO8601StyleDateMethodProvider.Default.Write(writer, setting, source); return; } if (DateTimeFormat.ChineseStyle.Equals(setting.DateTimeFormat)) { ChineseStyleDateMethodProvider.Default.Write(writer, setting, source); return; } if (DateTimeFormat.ISO8601Style.Equals(setting.DateTimeFormat)) { ISO8601StyleDateMethodProvider.Default.Write(writer, setting, source); return; } if (DateTimeFormat.MicrosoftStyle.Equals(setting.DateTimeFormat)) { MicrosoftStyleDateMethodProvider.Default.Write(writer, setting, source); return; } if (DateTimeFormat.RFC1123Style.Equals(setting.DateTimeFormat)) { RFC1123StyleDateMethodProvider.Default.Write(writer, setting, source); return; } IConvertMethodProvider <DateTime> customMethodProvider = CustomSerializationProvider.QueryCustomDatetimeFormat(setting.DateTimeFormat) as IConvertMethodProvider <DateTime>; if (customMethodProvider == null) { throw new ArgumentException("format is not defined"); } customMethodProvider.Write(writer, setting, source); }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, ulong source) { if (source == ulong.MinValue) { writer.Write("0"); return; } if (source == ulong.MaxValue) { writer.Write("18446744073709551615"); return; } char[] buffer = null; /*ushort的最大长度为10*/ var maxlength = "18446744073709551615".Length; buffer = new char[maxlength + 1]; ulong lessen = 0; KeyValuePair <char, char> item; do { lessen = source % 100; item = ZeroToHundred[lessen]; buffer[maxlength] = item.Value; buffer[maxlength - 1] = item.Key; maxlength -= 2; source = source / 100; } while (source != 0); if (item.Key == '0') { writer.Write(buffer, maxlength + 2); return; } writer.Write(buffer, maxlength + 1); return; }
private void WriteQuote(ISerializerWriter writer, JsonSerializeSetting setting, byte level, IEnumerable <T> array) { var list = array as IList <T>; if (list != null) { writer.Write("["); for (var i = 0; i < list.Count; i++) { writer.Write("\""); this.MethodProvider.Write(writer, setting, list[i]); writer.Write("\""); if (i < list.Count - 1) { writer.Write(","); } } writer.Write("]"); return; } writer.Write("["); var enumerator = array.GetEnumerator(); if (enumerator.MoveNext()) { writer.Write("\""); this.MethodProvider.Write(writer, setting, enumerator.Current); writer.Write("\""); } while (enumerator.MoveNext()) { writer.Write(","); writer.Write("\""); this.MethodProvider.Write(writer, setting, enumerator.Current); writer.Write("\""); } writer.Write("]"); return; }
/// <summary> /// 从对象中写入流中 /// </summary> /// <param name="writer">写入流</param> /// <param name="setting">配置项</param> /// <param name="source">源数据</param> public override void Write(ISerializerWriter writer, JsonSerializeSetting setting, Guid source) { var guid = source.ToString(); if (setting.WriteHorizontalLineOnGuidType) { writer.Write(guid); return; } /*9c43f081-a003-4b6f-b1fd-a5e8017c6b2b*/ var buffer = new char[32]; for (var i = 0; i < 8; i++) { buffer[i] = guid[i]; } for (var i = 9; i < 13; i++) { buffer[i - 1] = guid[i]; } for (var i = 14; i < 18; i++) { buffer[i - 2] = guid[i]; } for (var i = 19; i < 23; i++) { buffer[i - 3] = guid[i]; } for (var i = 24; i < 36; i++) { buffer[i - 4] = guid[i]; } writer.Write(buffer); }
public static void Write(ISerializerWriter writer, JsonSerializeSetting setting, char source) { CharMethodProvider.Default.Write(writer, setting, source); }
public static void Write(ISerializerWriter writer, JsonSerializeSetting setting, bool source) { BooleanMethodProvider.Default.Write(writer, setting, source); }
public static void WriteKeyValue(ISerializerWriter writer, JsonSerializeSetting setting, IDictionary array, byte level) { IDictionaryProvider.Default.Write(writer, setting, level, array); }