Files
lserp_cs_5.0/插件库/Zhaizj.Framework/Serialization/JsonParser/ObjectJsonParser.cs
T
2026-07-10 15:25:05 +08:00

77 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class ObjectJsonParser : JsonParserBase {
private Dictionary<String, object> map = new Dictionary<String, object>();
public override Object getResult() {
return this.map;
}
public ObjectJsonParser( CharSource charSrc )
: base( charSrc ) {
}
protected override void parse() {
charSrc.moveToText();
if (charSrc.getCurrent() != '{') throw ex( "json Object must start with { " );
charSrc.moveToText();
if (charSrc.getCurrent() == '}') return;
charSrc.back();
parseOne();
}
private void parseOne() {
charSrc.moveToText();
if (charSrc.getCurrent() == '}') return;
// 解析key
charSrc.back();
String key = moveAndGetParser().getResult().ToString();
// 解析冒号
charSrc.moveToText();
if (charSrc.getCurrent() != ':') throw ex( "json object's property pair must seperated with :" );
// 解析value
Object val = moveAndGetParser().getResult();
// 获取值
map.Add( key, val );
// 处理剩下的字符
charSrc.moveToText();
char c = charSrc.getCurrent();
if (c == '}') return;
if (c != ',') throw ex( "json object's property must seperated with ," );
charSrc.moveToText();
if (charSrc.getCurrent() == '}')
return;
else {
charSrc.back();
parseOne();
}
}
}
}