JsonConvert.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. /* Copyright 2010-present MongoDB Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. using System;
  16. using System.Globalization;
  17. namespace MongoDB.Bson.IO
  18. {
  19. /// <summary>
  20. /// Encodes and decodes scalar values to JSON compatible strings.
  21. /// </summary>
  22. public static class JsonConvert
  23. {
  24. /// <summary>
  25. /// Converts a string to a Boolean.
  26. /// </summary>
  27. /// <param name="value">The value.</param>
  28. /// <returns>A Boolean.</returns>
  29. public static bool ToBoolean(string value)
  30. {
  31. return bool.Parse(value);
  32. }
  33. /// <summary>
  34. /// Converts a string to a DateTime.
  35. /// </summary>
  36. /// <param name="value">The value.</param>
  37. /// <returns>A DateTime.</returns>
  38. public static DateTime ToDateTime(string value)
  39. {
  40. var formats = new[]
  41. {
  42. "yyyy-MM-ddK",
  43. "yyyy-MM-ddTHH:mm:ssK",
  44. "yyyy-MM-ddTHH:mm:ss.FFFFFFFK"
  45. };
  46. var style = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal;
  47. return DateTime.ParseExact(value, formats, DateTimeFormatInfo.InvariantInfo, style);
  48. }
  49. /// <summary>
  50. /// Converts a string to a DateTimeOffset.
  51. /// </summary>
  52. /// <param name="value">The value.</param>
  53. /// <returns> A DateTimeOffset.</returns>
  54. public static DateTimeOffset ToDateTimeOffset(string value)
  55. {
  56. return DateTimeOffset.ParseExact(value, "yyyy-MM-ddTHH:mm:ss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo);
  57. }
  58. /// <summary>
  59. /// Converts a string to a Decimal.
  60. /// </summary>
  61. /// <param name="value">The value.</param>
  62. /// <returns>A Decimal.</returns>
  63. public static decimal ToDecimal(string value)
  64. {
  65. return decimal.Parse(value, NumberFormatInfo.InvariantInfo);
  66. }
  67. /// <summary>
  68. /// Converts a string to a <see cref="Decimal128"/>.
  69. /// </summary>
  70. /// <param name="value">The value.</param>
  71. /// <returns>A <see cref="Decimal128"/>.</returns>
  72. public static Decimal128 ToDecimal128(string value)
  73. {
  74. return Decimal128.Parse(value);
  75. }
  76. /// <summary>
  77. /// Converts a string to a Double.
  78. /// </summary>
  79. /// <param name="value">The value.</param>
  80. /// <returns>A Double.</returns>
  81. public static double ToDouble(string value)
  82. {
  83. return double.Parse(value, NumberFormatInfo.InvariantInfo);
  84. }
  85. /// <summary>
  86. /// Converts a string to an Int16.
  87. /// </summary>
  88. /// <param name="value">The value.</param>
  89. /// <returns>An Int16.</returns>
  90. public static short ToInt16(string value)
  91. {
  92. return Int16.Parse(value);
  93. }
  94. /// <summary>
  95. /// Converts a string to an Int32.
  96. /// </summary>
  97. /// <param name="value">The value.</param>
  98. /// <returns>An Int32.</returns>
  99. public static int ToInt32(string value)
  100. {
  101. return Int32.Parse(value);
  102. }
  103. /// <summary>
  104. /// Converts a string to an Int64.
  105. /// </summary>
  106. /// <param name="value">The value.</param>
  107. /// <returns>An Int64.</returns>
  108. public static long ToInt64(string value)
  109. {
  110. return Int64.Parse(value);
  111. }
  112. /// <summary>
  113. /// Converts a string to a Single.
  114. /// </summary>
  115. /// <param name="value">The value.</param>
  116. /// <returns>A Single.</returns>
  117. public static float ToSingle(string value)
  118. {
  119. return float.Parse(value, NumberFormatInfo.InvariantInfo);
  120. }
  121. /// <summary>
  122. /// Converts a Boolean to a string.
  123. /// </summary>
  124. /// <param name="value">The value.</param>
  125. /// <returns>A string.</returns>
  126. public static string ToString(bool value)
  127. {
  128. return value ? "true" : "false";
  129. }
  130. /// <summary>
  131. /// Converts a DateTime to a string.
  132. /// </summary>
  133. /// <param name="value">The value.</param>
  134. /// <returns>A string.</returns>
  135. public static string ToString(DateTime value)
  136. {
  137. return value.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo);
  138. }
  139. /// <summary>
  140. /// Converts a DateTimeOffset to a string.
  141. /// </summary>
  142. /// <param name="value">The value.</param>
  143. /// <returns>A string.</returns>
  144. public static string ToString(DateTimeOffset value)
  145. {
  146. return value.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo);
  147. }
  148. /// <summary>
  149. /// Converts a Decimal to a string.
  150. /// </summary>
  151. /// <param name="value">The value.</param>
  152. /// <returns>A string.</returns>
  153. public static string ToString(decimal value)
  154. {
  155. return value.ToString("G", NumberFormatInfo.InvariantInfo);
  156. }
  157. /// <summary>
  158. /// Converts a <see cref="Decimal128"/> to a string.
  159. /// </summary>
  160. /// <param name="value">The value.</param>
  161. /// <returns>A string.</returns>
  162. public static string ToString(Decimal128 value)
  163. {
  164. return value.ToString();
  165. }
  166. /// <summary>
  167. /// Converts a Double to a string.
  168. /// </summary>
  169. /// <param name="value">The value.</param>
  170. /// <returns>A string.</returns>
  171. public static string ToString(double value)
  172. {
  173. return value.ToString("G17", NumberFormatInfo.InvariantInfo);
  174. }
  175. /// <summary>
  176. /// Converts a Single to a string.
  177. /// </summary>
  178. /// <param name="value">The value.</param>
  179. /// <returns>A string.</returns>
  180. public static string ToString(float value)
  181. {
  182. return value.ToString("R", NumberFormatInfo.InvariantInfo);
  183. }
  184. /// <summary>
  185. /// Converts an Int32 to a string.
  186. /// </summary>
  187. /// <param name="value">The value.</param>
  188. /// <returns>A string.</returns>
  189. public static string ToString(int value)
  190. {
  191. return value.ToString();
  192. }
  193. /// <summary>
  194. /// Converts an Int64 to a string.
  195. /// </summary>
  196. /// <param name="value">The value.</param>
  197. /// <returns>A string.</returns>
  198. public static string ToString(long value)
  199. {
  200. return value.ToString();
  201. }
  202. /// <summary>
  203. /// Converts an Int16 to a string.
  204. /// </summary>
  205. /// <param name="value">The value.</param>
  206. /// <returns>A string.</returns>
  207. public static string ToString(short value)
  208. {
  209. return value.ToString();
  210. }
  211. /// <summary>
  212. /// Converts a UInt32 to a string.
  213. /// </summary>
  214. /// <param name="value">The value.</param>
  215. /// <returns>A string.</returns>
  216. [CLSCompliant(false)]
  217. public static string ToString(uint value)
  218. {
  219. return value.ToString();
  220. }
  221. /// <summary>
  222. /// Converts a UInt64 to a string.
  223. /// </summary>
  224. /// <param name="value">The value.</param>
  225. /// <returns>A string.</returns>
  226. [CLSCompliant(false)]
  227. public static string ToString(ulong value)
  228. {
  229. return value.ToString();
  230. }
  231. /// <summary>
  232. /// Converts a UInt16 to a string.
  233. /// </summary>
  234. /// <param name="value">The value.</param>
  235. /// <returns>A string.</returns>
  236. [CLSCompliant(false)]
  237. public static string ToString(ushort value)
  238. {
  239. return value.ToString();
  240. }
  241. /// <summary>
  242. /// Converts a string to a UInt16.
  243. /// </summary>
  244. /// <param name="value">The value.</param>
  245. /// <returns>A UInt16.</returns>
  246. [CLSCompliant(false)]
  247. public static ushort ToUInt16(string value)
  248. {
  249. return UInt16.Parse(value);
  250. }
  251. /// <summary>
  252. /// Converts a string to a UInt32.
  253. /// </summary>
  254. /// <param name="value">The value.</param>
  255. /// <returns>A UInt32.</returns>
  256. [CLSCompliant(false)]
  257. public static uint ToUInt32(string value)
  258. {
  259. return UInt32.Parse(value);
  260. }
  261. /// <summary>
  262. /// Converts a string to a UInt64.
  263. /// </summary>
  264. /// <param name="value">The value.</param>
  265. /// <returns>A UInt64.</returns>
  266. [CLSCompliant(false)]
  267. public static ulong ToUInt64(string value)
  268. {
  269. return UInt64.Parse(value);
  270. }
  271. }
  272. }