jsonfileloader.c 3.9 KB

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