title: Newtonsoft JSON- Conversion to/from DataSet causes Decimal to become Double?
body: <p>I'm using Newtonsoft JSON to serialize a DataSet to binary JSON using the code below. When de-serializing back to a DataSet, the field type changes from a Decimal to a Double? Does anybody know what's going wrong?</p>
  
  <p>Sample code:</p>
  
  <pre><code>static void Main(string[] args)
  {
    var ds = new DataSet();
    var dt = ds.Tables.Add();
    dt.Columns.Add("Test", typeof(Decimal));
    dt.Rows.Add(new object[] { 1.23345M });
  
    var data = DataSetToBinJSON(ds);
  
    var ds2 = BinJSONToDataSet(data);
    Console.WriteLine((ds2.Tables[0].Columns[0].DataType == typeof(Decimal)) ? "Passed" : string.Format("Failed- {0}", ds2.Tables[0].Columns[0].DataType));
    Console.ReadLine();
  }
  
  
  
  /// &lt;summary&gt;
  /// Utility function to create an optimized Binary JSON version of a DataSet
  /// &lt;/summary&gt;
  public static byte[] DataSetToBinJSON(DataSet dataSet)
  {
    if (dataSet == null || dataSet.Tables == null || dataSet.Tables.Count == 0)
    {
      return null;
    }
  
    using (var ms = new MemoryStream())
    {
      using (var writer = new BsonWriter(ms))
      {
        var serializer = new JsonSerializer();
        serializer.Serialize(writer, dataSet);
        return ms.ToArray();
      }
    }
  }
  
  
  /// &lt;summary&gt;
  /// Utility function to deserialize an optimized Binary JSON serialized DataSet
  /// &lt;/summary&gt;   
  public static DataSet BinJSONToDataSet(byte[] dataBytes)
  {
    if (dataBytes.Length == 0)
    {
      return null;
    }
  
    using (var ms = new MemoryStream(dataBytes))
    {
      using (var reader = new BsonReader(ms))
      {
        var serializer = new JsonSerializer();
        return serializer.Deserialize&lt;DataSet&gt;(reader);
      }
    }
  }
  </code></pre>