CPF/CPF.Windows/Json/Formatter/Serializer/Option/JsonSerializerHandler.cs
2023-11-21 23:05:03 +08:00

86 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
namespace CPF.Windows.Json
{
/// <summary>
/// 提供了用于在序列化中的一些配置
/// Provides some configuration for serialization
/// </summary>
public class JsonSerializerHandler
{
#region pregenerated metas
internal static readonly FieldInfo _Option = typeof(JsonSerializerHandler).GetField(nameof(Option));
internal static readonly FieldInfo _SerializeStacks = typeof(JsonSerializerHandler).GetField(nameof(SerializeStacks), BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo _CommaIndexLists = typeof(JsonSerializerHandler).GetField(nameof(CommaIndexLists), BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly MethodInfo _WriteStringInvoke = typeof(Action<string>).GetMethod("Invoke");
internal static readonly FieldInfo _WriteString = typeof(JsonSerializerHandler).GetField(nameof(WriteString));
#endregion
internal JsonSerializerHandler(StringBuilder stringBuilder) {
this.stringBuilder = stringBuilder;
WriteString = str => this.stringBuilder.Append(str);
WriteChars = (chars, start, length) => this.stringBuilder.Append(chars, start, length);
WriteChar = @char => this.stringBuilder.Append(@char);
WriteLong = @long => this.stringBuilder.Append(@long);
}
internal JsonSerializerHandler(StreamWriter streamWriter)
{
this.streamWriter = streamWriter;
WriteString = str => this.streamWriter.Write(str);
WriteChars = (chars, start, length) => this.streamWriter.Write(chars, start, length);
WriteChar = @char => this.streamWriter.Write(@char);
WriteLong = @long => this.streamWriter.Write(@long);
}
internal StringBuilder stringBuilder;
internal StreamWriter streamWriter;
/// <summary>
/// Write Long
/// </summary>
public Action<long> WriteLong;
/// <summary>
/// Write Char
/// </summary>
public Action<char> WriteChar;
/// <summary>
/// Write String
/// </summary>
public Action<string> WriteString;
/// <summary>
/// Write Chars
/// </summary>
public Action<char[], int, int> WriteChars;
/// <summary>
/// Json Serializer Option
/// </summary>
public JsonSerializerOption Option = null;
/// <summary>
/// Used for infinite loop interreferences
/// </summary>
internal Stack<object> SerializeStacks = new Stack<object>();
/// <summary>
/// Used for JsonRefernceHandlingEnum. Remove case, customtype comma to delete
/// </summary>
internal Stack<int> CommaIndexLists = new Stack<int>();
internal new string ToString()
{
return stringBuilder.ToString();
}
}
}