using System;
using System.Collections.Generic;
using System.Text;
namespace NewLife.Serialization
{
/// <summary>IJson序列化接口</summary>
public interface IJson : IFormatterX
{
#region 属性
/// <summary>是否缩进</summary>
Boolean Indented { get; set; }
/// <summary>处理器列表</summary>
IList<IJsonHandler> Handlers { get; }
#endregion
#region 写入
/// <summary>写入字符串</summary>
/// <param name="value"></param>
void Write(String value);
/// <summary>写入</summary>
/// <param name="sb"></param>
/// <param name="value"></param>
void Write(StringBuilder sb, Object value);
#endregion
#region 读取
/// <summary>读取</summary>
/// <param name="value"></param>
/// <returns></returns>
Boolean Read(String value);
/// <summary>读取字节</summary>
/// <returns></returns>
Byte ReadByte();
#endregion
}
/// <summary>IJson读写处理器接口</summary>
public interface IJsonHandler : IHandler<IJson>
{
/// <summary>获取对象的Json字符串表示形式。</summary>
/// <param name="value"></param>
/// <returns>返回null表示不支持</returns>
String GetString(Object value);
}
/// <summary>IJson读写处理器基类</summary>
public abstract class JsonHandlerBase : HandlerBase<IJson, IJsonHandler>, IJsonHandler
{
/// <summary>获取对象的Json字符串表示形式。</summary>
/// <param name="value"></param>
/// <returns>返回null表示不支持</returns>
public abstract String GetString(Object value);
/// <summary>写入一个对象</summary>
/// <param name="value">目标对象</param>
/// <param name="type">类型</param>
/// <returns>是否处理成功</returns>
public override Boolean Write(Object value, Type type)
{
var v = GetString(value);
if (v == null) return false;
Host.Write(v);
return true;
}
}
}
|