2017-02-04 103 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\" }');