77 lines
1.7 KiB
C#
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();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|