jsonfileloader.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. class JsonFileLoader<Class T>
  2. {
  3. protected static const int READ_FILE_LENGTH = 100000000;
  4. protected static ref JsonSerializer m_Serializer = new JsonSerializer();
  5. static bool LoadFile(string filename, out T data, out string errorMessage)
  6. {
  7. if (FileExist(filename))
  8. {
  9. FileHandle handle = OpenFile(filename, FileMode.READ);
  10. if (handle == 0)
  11. {
  12. errorMessage = string.Format("Cannot open file \"%1\" for reading", filename);
  13. return false;
  14. }
  15. string fileContent;
  16. ReadFile(handle, fileContent, READ_FILE_LENGTH);
  17. CloseFile(handle);
  18. if (!m_Serializer)
  19. m_Serializer = new JsonSerializer();
  20. string error;
  21. if (!m_Serializer.ReadFromString(data, fileContent, error))
  22. {
  23. errorMessage = string.Format("Cannot load data from \"%1\":\n%2", filename, error);
  24. return false;
  25. }
  26. return true;
  27. }
  28. else
  29. {
  30. errorMessage = string.Format("File \"%1\" does not exist, check the provided path", filename, error);
  31. return false;
  32. }
  33. }
  34. static bool SaveFile(string filename, T data, out string errorMessage)
  35. {
  36. string fileContent;
  37. if (!m_Serializer)
  38. m_Serializer = new JsonSerializer();
  39. string makeDataError;
  40. if (!MakeData(data, fileContent, makeDataError, true))
  41. {
  42. errorMessage = string.Format("Cannot save data to file \"%1\", %2", filename, makeDataError);
  43. return false;
  44. }
  45. FileHandle handle = OpenFile(filename, FileMode.WRITE);
  46. if (handle == 0)
  47. {
  48. errorMessage = string.Format("Cannot open file \"%1\" for writing", filename);
  49. return false;
  50. }
  51. FPrint(handle, fileContent);
  52. CloseFile(handle);
  53. return true;
  54. }
  55. static bool LoadData(string string_data, out T data, out string errorMessage)
  56. {
  57. string error;
  58. if (!m_Serializer)
  59. m_Serializer = new JsonSerializer();
  60. if (!m_Serializer.ReadFromString(data, string_data, error))
  61. {
  62. errorMessage = string.Format("Cannot load provided JSON data (deserialization error) - check syntax: %1", error);
  63. return false;
  64. }
  65. return true;
  66. }
  67. static bool MakeData(T inputData, out string outputData, out string errorMessage, bool prettyPrint = true)
  68. {
  69. if (!m_Serializer)
  70. m_Serializer = new JsonSerializer();
  71. if (!m_Serializer.WriteToString(inputData, prettyPrint, outputData))
  72. {
  73. errorMessage = "Cannot create JSON from provided data (serialization error)";
  74. return false;
  75. }
  76. return true;
  77. }
  78. //! DEPRECATED
  79. //! ----------
  80. //! #ifndef DIAG_DEVELOPER
  81. //! use JsonFileLoader::LoadFile instead
  82. static void JsonLoadFile(string filename, out T data)
  83. {
  84. if (FileExist(filename))
  85. {
  86. string file_content;
  87. string line_content;
  88. string error;
  89. FileHandle handle = OpenFile(filename, FileMode.READ);
  90. if (handle == 0)
  91. return;
  92. while (FGets(handle, line_content) >= 0)
  93. {
  94. file_content += line_content;
  95. }
  96. CloseFile(handle);
  97. if (!m_Serializer)
  98. m_Serializer = new JsonSerializer();
  99. if (!m_Serializer.ReadFromString(data, file_content, error))
  100. ErrorEx(string.Format("Cannot load data from \"%1\":\n%2", filename, error));
  101. }
  102. }
  103. //! use JsonFileLoader::SaveFile instead
  104. static void JsonSaveFile(string filename, T data)
  105. {
  106. string file_content;
  107. if (!m_Serializer)
  108. m_Serializer = new JsonSerializer();
  109. m_Serializer.WriteToString(data, true, file_content);
  110. FileHandle handle = OpenFile(filename, FileMode.WRITE);
  111. if (handle == 0)
  112. return;
  113. FPrint(handle, file_content);
  114. CloseFile(handle);
  115. }
  116. //!use JsonFileLoader::LoadData instead
  117. static void JsonLoadData(string string_data, out T data)
  118. {
  119. string error;
  120. if (!m_Serializer)
  121. m_Serializer = new JsonSerializer();
  122. if (!m_Serializer.ReadFromString(data, string_data, error))
  123. ErrorEx(string.Format("Cannot load data %1", error));
  124. }
  125. //!use JsonFileLoader::MakeData instead
  126. static string JsonMakeData(T data)
  127. {
  128. string string_data;
  129. if (!m_Serializer)
  130. m_Serializer = new JsonSerializer();
  131. m_Serializer.WriteToString(data, true, string_data);
  132. return string_data;
  133. }
  134. //#endif
  135. }