12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using Jint.Native.Object;
- using Jint.Runtime.Interop;
- namespace Jint.Native.Json
- {
- public sealed class JsonInstance : ObjectInstance
- {
- private readonly Engine _engine;
- private JsonInstance(Engine engine)
- : base(engine)
- {
- _engine = engine;
- Extensible = true;
- }
- public override string Class
- {
- get
- {
- return "JSON";
- }
- }
- public static JsonInstance CreateJsonObject(Engine engine)
- {
- var json = new JsonInstance(engine);
- json.Prototype = engine.Object.PrototypeObject;
- return json;
- }
- public void Configure()
- {
- FastAddProperty("parse", new ClrFunctionInstance(Engine, Parse, 2), true, false, true);
- FastAddProperty("stringify", new ClrFunctionInstance(Engine, Stringify, 3), true, false, true);
- }
- public JsValue Parse(JsValue thisObject, JsValue[] arguments)
- {
- var parser = new JsonParser(_engine);
- return parser.Parse(arguments[0].AsString());
- }
- public JsValue Stringify(JsValue thisObject, JsValue[] arguments)
- {
- JsValue
- value = Undefined.Instance,
- replacer = Undefined.Instance,
- space = Undefined.Instance;
- if (arguments.Length > 2)
- {
- space = arguments[2];
- }
- if (arguments.Length > 1)
- {
- replacer = arguments[1];
- }
- if (arguments.Length > 0)
- {
- value = arguments[0];
- }
- var serializer = new JsonSerializer(_engine);
- if (value == Undefined.Instance && replacer == Undefined.Instance) {
- return Undefined.Instance;
- }
- else {
- return serializer.Serialize(value, replacer, space);
- }
- }
- }
- }
|