2017-02-04 101 views
1

我正在使用web api,我需要保存json對象到我的數據庫。我將獲得屏幕大小,顏色,並保存到數據庫。Web api保存json到數據庫並得到json

{ "height": 1536, "width": 2048, "color": "#114521" } 

但我不想爲這些數據創建C#類。我想創建一個名爲設置類:

public class Settings{ 
    public string Username {get;set;} 
    public string Data {get;set;} // This will be json settings data 
} 

但我會回來這個json對象。

我創建一個新的設置C#實例:

public Settings Get(){ 
    var settings = new Settings{ 
    Username="myname", 
    Data="{ \"height\": 1536, \"width\": 2048, \"color\": \"#114521\" }" 
    }; 
    return settings; 
} 

Data是要客戶爲文本,而不是JSON對象。我會將Data保存到數據庫中作爲原始json。)

+0

只是爲了確認 - 你是否在你的數據庫中序列化'Settings',或者你只是將它用作DTO從Web API返回值? – dbc

+0

這是否回答你的問題? [如何將json反序列化爲對象,以便嵌套的json將轉換爲JSON列表而不是對象](http://stackoverflow.com/a/40539360/3744182)。 – dbc

+0

聽起來像你可能已經啓用了'DataContractJsonSerializer'。請參閱https://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_media_type_formatter和https://stackoverflow.com/questions/20371040/am-i - 使用 - datacontractjsonserializer還是先JSON的淨一個合我的Web-API-2。 – dbc

回答

0

在所提供的示例中,Json是一個字符串,它在被反序列化之前不是對象。包含在Settings.Data中的字符串可以傳遞給Insert查詢。你可以有一個列來存儲整個Json字符串。如果您的數據庫是SQL Server,則varchar數據類型的最大長度爲8000,或者可以使用幾乎不受限制的varchar(max)。

所以你的JSON字符串存儲在數據庫中:

  1. 創建一個列(如果不是已經存在)來存儲數據
  2. 創建一個SQL INSERT語句來插入值到數據庫中。如:

    INSERT INTO MyTable (UserName, JsonColumnName) VALUES (@userName, @JsonString) 
    
  3. 從Settings.Data值傳遞給你的INSERT語句或SqlParameter的對象,這取決於你的應用程序與數據庫進行交互的格式。

爲了從數據庫中獲取JSON的值:

  1. 創建選擇狀態找到正確的JSON字符串,基於用戶名,或任何唯一的ID,用於標識JSON字符串,
  2. 從查詢結果中檢索json字符串。
0

無所謂,它不會顯示爲JSON字符串。當在客戶端序列化爲json時,它將轉換爲對象。

var obj = JSON.parse('{ \"height\": 1536, \"width\": 2048, \"color\": \"#114521\" }');