JsonInstance.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using Jint.Native.Object;
  2. using Jint.Runtime.Interop;
  3. namespace Jint.Native.Json
  4. {
  5. public sealed class JsonInstance : ObjectInstance
  6. {
  7. private readonly Engine _engine;
  8. private JsonInstance(Engine engine)
  9. : base(engine)
  10. {
  11. _engine = engine;
  12. Extensible = true;
  13. }
  14. public override string Class
  15. {
  16. get
  17. {
  18. return "JSON";
  19. }
  20. }
  21. public static JsonInstance CreateJsonObject(Engine engine)
  22. {
  23. var json = new JsonInstance(engine);
  24. json.Prototype = engine.Object.PrototypeObject;
  25. return json;
  26. }
  27. public void Configure()
  28. {
  29. FastAddProperty("parse", new ClrFunctionInstance(Engine, Parse, 2), true, false, true);
  30. FastAddProperty("stringify", new ClrFunctionInstance(Engine, Stringify, 3), true, false, true);
  31. }
  32. public JsValue Parse(JsValue thisObject, JsValue[] arguments)
  33. {
  34. var parser = new JsonParser(_engine);
  35. return parser.Parse(arguments[0].AsString());
  36. }
  37. public JsValue Stringify(JsValue thisObject, JsValue[] arguments)
  38. {
  39. JsValue
  40. value = Undefined.Instance,
  41. replacer = Undefined.Instance,
  42. space = Undefined.Instance;
  43. if (arguments.Length > 2)
  44. {
  45. space = arguments[2];
  46. }
  47. if (arguments.Length > 1)
  48. {
  49. replacer = arguments[1];
  50. }
  51. if (arguments.Length > 0)
  52. {
  53. value = arguments[0];
  54. }
  55. var serializer = new JsonSerializer(_engine);
  56. if (value == Undefined.Instance && replacer == Undefined.Instance) {
  57. return Undefined.Instance;
  58. }
  59. else {
  60. return serializer.Serialize(value, replacer, space);
  61. }
  62. }
  63. }
  64. }