public void CallSerialize(SubString value) { if (value.String == null) { CharStream.WriteJsonNull(); } else { CharStream.WriteJson(ref value, Config.NullChar); } }
public void CallSerialize(byte?value) { if (value.HasValue) { CallSerialize(value.Value); } else { CharStream.WriteJsonNull(); } }
public void CallSerialize(string value) { if (value != null) { primitiveSerialize(value); } else { CharStream.WriteJsonNull(); } }
public void CallSerialize(System.Guid?value) { if (value.HasValue) { CallSerialize((System.Guid)value); } else { CharStream.WriteJsonNull(); } }
public void CallSerialize(DateTime?value) { if (value.HasValue) { CallSerialize((DateTime)value); } else { CharStream.WriteJsonNull(); } }
public void CallSerialize(decimal?value) { if (value.HasValue) { CharStream.SimpleWrite(((decimal)value).ToString()); } else { CharStream.WriteJsonNull(); } }
public void CallSerialize(Type type) { if (type == null) { CharStream.WriteJsonNull(); } else { AutoCSer.Reflection.RemoteType remoteType = new AutoCSer.Reflection.RemoteType(type); TypeSerializer <AutoCSer.Reflection.RemoteType> .MemberSerialize(this, ref remoteType); } }
public void TypeSerialize <valueType>(valueType value) { if (value == null) { CharStream.WriteJsonNull(); } else { TypeSerializer <valueType> .Serialize(this, ref value); } }
/// <summary> /// 时间转换 /// </summary> /// <param name="value">时间</param> internal void SerializeDateTime(DateTime value) { if (value == DateTime.MinValue && Config.IsDateTimeMinNull) { CharStream.WriteJsonNull(); return; } switch (Config.DateTimeType) { case DateTimeType.Default: CharStream.WriteJsonString(value); return; case DateTimeType.Sql: CharStream.WriteJsonSqlString(value); return; case DateTimeType.Javascript: CharStream.WriteJsonNewDate(); CallSerialize(((value.Kind == DateTimeKind.Utc ? value.Ticks + Date.LocalTimeTicks : value.Ticks) - AutoCSer.JsonDeSerializer.JavascriptLocalMinTimeTicks) / TimeSpan.TicksPerMillisecond); CharStream.Data.Write(')'); return; case DateTimeType.ThirdParty: CharStream.WriteJsonOtherDate(); CallSerialize(((value.Kind == DateTimeKind.Utc ? value.Ticks + Date.LocalTimeTicks : value.Ticks) - AutoCSer.JsonDeSerializer.JavascriptLocalMinTimeTicks) / TimeSpan.TicksPerMillisecond); CharStream.WriteJsonOtherDateEnd(); return; case DateTimeType.CustomFormat: if (Config.DateTimeCustomFormat == null) { primitiveSerialize(value.ToString()); } else { primitiveSerialize(value.ToString(Config.DateTimeCustomFormat)); } return; } }
/// <summary> /// /// </summary> /// <param name="value"></param> private void serialize(ref Node value) { switch (value.Type) { case NodeType.Dictionary: CharStream.Write('{'); if ((int)value.Int64 != 0) { KeyValue <Node, Node>[] array = value.DictionaryArray; for (int index = 0; index != (int)value.Int64; ++index) { if (index != 0) { CharStream.Write(','); } serialize(ref array[index].Key); CharStream.Write(':'); serialize(ref array[index].Value); } } CharStream.Write('}'); return; case NodeType.Array: CharStream.Write('['); if ((int)value.Int64 != 0) { Node[] array = value.ListArray; for (int index = 0; index != (int)value.Int64; ++index) { if (index != 0) { CharStream.Write(','); } serialize(ref array[index]); CharStream.Write(':'); serialize(ref array[index]); } } CharStream.Write(']'); return; case NodeType.String: { SubString subString = value.SubString; CharStream.WriteJson(ref subString, Config.NullChar); } return; case NodeType.QuoteString: case NodeType.ErrorQuoteString: CharStream.PrepCharSize(value.SubString.Length + 2); CharStream.Data.Write((char)value.Int64); CharStream.Write(ref value.SubString); CharStream.Data.Write((char)value.Int64); return; case NodeType.NumberString: if ((int)value.Int64 == 0) { CharStream.Write(ref value.SubString); } else { CharStream.PrepCharSize(value.SubString.Length + 2); CharStream.Data.Write((char)value.Int64); CharStream.Write(ref value.SubString); CharStream.Data.Write((char)value.Int64); } return; case NodeType.Bool: CallSerialize((int)value.Int64 != 0); return; case NodeType.DateTimeTick: CallSerialize(new DateTime(value.Int64, DateTimeKind.Local)); return; case NodeType.NaN: CharStream.WriteJsonNaN(); return; case NodeType.PositiveInfinity: if (Config.IsInfinityToNaN) { CharStream.WriteJsonNaN(); } else { CharStream.WritePositiveInfinity(); } return; case NodeType.NegativeInfinity: if (Config.IsInfinityToNaN) { CharStream.WriteJsonNaN(); } else { CharStream.WriteNegativeInfinity(); } return; default: CharStream.WriteJsonNull(); return; } }