JsonArray.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace FastReport.Utils.Json
  5. {
  6. internal class JsonArray : JsonBase, IEnumerable<object>
  7. {
  8. #region Private Fields
  9. private readonly List<object> array = new List<object>();
  10. #endregion Private Fields
  11. #region Public Indexers
  12. public override object this[int index]
  13. {
  14. get
  15. {
  16. if (index >= 0 && index < Count)
  17. return array[index];
  18. return null;
  19. }
  20. set
  21. {
  22. array[index] = value;
  23. }
  24. }
  25. #endregion Public Indexers
  26. #region Public Properties
  27. public override int Count
  28. {
  29. get
  30. {
  31. return array.Count;
  32. }
  33. }
  34. public override bool IsArray
  35. {
  36. get
  37. {
  38. return true;
  39. }
  40. }
  41. #endregion Public Properties
  42. #region Public Methods
  43. public void Add(object obj)
  44. {
  45. array.Add(obj);
  46. }
  47. public IEnumerator<object> GetEnumerator()
  48. {
  49. return array.GetEnumerator();
  50. }
  51. IEnumerator IEnumerable.GetEnumerator()
  52. {
  53. return array.GetEnumerator();
  54. }
  55. public void Insert(int index, object obj)
  56. {
  57. array.Insert(index, obj);
  58. }
  59. public void Remove(int index)
  60. {
  61. array.RemoveAt(index);
  62. }
  63. public override void WriteTo(StringBuilder sb, int indent)
  64. {
  65. sb.Append('[');
  66. bool notFirst = false;
  67. foreach (object item in array)
  68. {
  69. if (notFirst)
  70. sb.Append(',');
  71. if (indent > 0)
  72. {
  73. sb.AppendLine();
  74. for (int i = 0; i < indent; i++)
  75. sb.Append(' ');
  76. }
  77. WriteValue(sb, item, indent);
  78. notFirst = true;
  79. }
  80. if (indent > 0 && notFirst)
  81. {
  82. sb.AppendLine();
  83. for (int i = 2; i < indent; i++)
  84. sb.Append(' ');
  85. }
  86. sb.Append(']');
  87. }
  88. #endregion Public Methods
  89. }
  90. }