JsonInstance.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. return json;
  25. }
  26. public void Configure()
  27. {
  28. FastAddProperty("parse", new ClrFunctionInstance<JsonInstance, object>(Engine, Parse), true, false, true);
  29. FastAddProperty("stringify", new ClrFunctionInstance<JsonInstance, object>(Engine, Stringify), true, false, true);
  30. }
  31. public object Parse(JsonInstance thisObject, object[] arguments)
  32. {
  33. var parser = new JsonParser(_engine);
  34. return parser.Parse(arguments[0].ToString());
  35. }
  36. public object Stringify(JsonInstance thisObject, object[] arguments)
  37. {
  38. object
  39. value = Undefined.Instance,
  40. replacer = Undefined.Instance,
  41. space = Undefined.Instance;
  42. if (arguments.Length > 2)
  43. {
  44. space = arguments[2];
  45. }
  46. if (arguments.Length > 1)
  47. {
  48. replacer = arguments[1];
  49. }
  50. if (arguments.Length > 0)
  51. {
  52. value = arguments[0];
  53. }
  54. var serializer = new JsonSerializer(_engine);
  55. return serializer.Serialize(value, replacer, space);
  56. }
  57. }
  58. }