2017-09-20 77 views
0

我正在DataSet並通過JSON.NETJSON.NET轉換特定關鍵整數

我面臨的問題是其中一個字段存儲爲一個浮點值,將其轉換爲JSON,但我需要它作爲一個整數序列化。我不想改變全部浮點數爲整數,只是那一個字段。

有沒有人有這樣的例子?

+0

怎樣把一個DataSet到JSON?請分享您的代碼和一些示例數據以及您希望得到的-HTH;)的結果。 –

回答

0

假設我們已經從dbTable填充了數據。我們需要從它自己的改變場dbTableField值類型爲double:

var ds = new DataSet(); 
new SqlDataAdapter(com).Fill(ds, "dbTable"); 
var result = JsonConvert.SerializeObject(ds, Formatting.Indented, new 
DataSetFieldTypeConverter(typeof(double), "dbTable", "dbTableField")); 
下面

是DataSetFieldTypeConverter類:

class DataSetFieldTypeConverter : JsonConverter 
{ 
    private Type convertTo; 
    private string tableName; 
    private string fieldName; 
    public DataSetFieldTypeConverter(Type convertTo, string tableName, string fieldName) 
    { 
     this.convertTo = convertTo; 
     this.tableName = tableName; 
     this.fieldName = fieldName; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     JToken t = JToken.FromObject(value); 

     if (t.Type != JTokenType.Object) 
     { 
      t.WriteTo(writer); 
     } 
     else 
     { 
      JObject jsonObj = t as JObject; 
      if (jsonObj != null && jsonObj[tableName] != null && jsonObj[tableName][0][fieldName] != null) 
      { 
       var propVal= jsonObj[tableName][0][fieldName].Value<string>(); 

       //Write your own covert logic here 

       if (convertTo == typeof(int)) 
       { 
        int propValInt; 
        if (int.TryParse(propVal, out propValInt)) 
        { 
         jsonObj[tableName][0][fieldName] = propValInt; 
        } 
       } 
       if (convertTo == typeof(double)) 
       { 
        double propValInt; 
        if (double.TryParse(propVal, out propValInt)) 
        { 
         jsonObj[tableName][0][fieldName] = propValInt; 
        } 
       } 
       jsonObj.WriteTo(writer); 
      } 
     } 
    } 

這個環節將是有益的:https://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm