用用C#实现一个实现一个Json解析器(解析器(5))——语法分析器语法分析器
目录目录前言语法分析器接口基本语法分析器类泛型方法带Type参数的方法ParseObjectParseArrayParseBaseTypedynamic方法
前言前言
本次我们实现解析器的语法分析功能。
注意:示例代码使用了C#8.0的语法特性,如果要在你的机器上运行,请确保安装了.Net Core 3.x开发环境。
语法分析器接口语法分析器接口
因为我们要通过多态来实现两种语法分析器的分离,所以提取一个语法分析器接口IParser:
interface IParser
{
T ToObject(string json);
object ToObject(System.Type type, string json);
dynamic ToObject(string json);
}
基本语法分析器类基本语法分析器类
创建基本语法分析器类PrimaryParser,实现IParser接口,现在的代码是这种情况:
internal class PrimaryParser : IParser
{
public T ToObject(string json)
{
throw new NotImplementedException();
}
public object ToObject(Type type, string json)
{
throw new NotImplementedException();
}
public dynamic ToObject(string json)
{
throw new NotImplementedException();
}
}
现在我们就来逐个实现这三个方法。
泛型方法泛型方法
首先是泛型方法,这个方法最简单,就一行代码:
return (T) ToObject(typeof(T), json);
我靠!那你为毛不干脆给其中一个就得了?很简单,泛型方法的类型是编译期确定的,如果用户在编译期就明确知道要转换的
具体类是谁,泛型方法确实很强。那要是这样呢?
用户要通过外部输入来确定实例化Parent还是A还是B,这时候用户在编译期只有一个Type对象,没有具体的类型,泛型方法
就废了。
评论0
最新资源