2017-02-10 87 views
1

我将数据库中的数据绑定到JSON文件。通过在文件后面的代码中使用代码。如何更改asp.net中的Json保存文件内容

string JSONString = JsonConvert.SerializeObject(datatable); 

默认情况下,数据表以这种格式存储到json文件中。我附上了下面给出的代码。

[ 
    { 
    "ProductID": 17, 
    "ProductName": "Alice Mutton" 
    }, 
    { 
    "ProductID": 3, 
    "ProductName": "Aniseed Syrup" 
    }, 
    { 
    "ProductID": 40, 
    "ProductName": "Boston Crab Meat" 
    }] 

我想将此保存格式更改为像这样。

{ 

    "from_ProductName": "Alice Mutton",// Too Tip 
    "to_ProductName": "Boston Crab Meat",// Too Tip 
    "column_names": [ 
    "ProductName", 
    "ProductID" 
    ], 

    "data": [ 
    [ 
     "Alice Mutton", 
     17 
    ], 
    [ 
     "Aniseed Syrup", 
     2 
    ], 
    [ 
     "Boston Crab Meat", 
     250.1 
    ]] 
} 

这个数据应该来自数据库。

任何一个可以告诉我如何实现任务

回答

1

我做了这个简单的例子,你可以运行它,你会看到完全相同的结果,你想要的。

首先,我创建类来表示您的数据库对象

private class Product 
{ 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
} 

然后,我创造了这个方法来得到你想要的

private async void button1_Click(object sender, EventArgs e) 
{ 
    var originalJson = "[\r\n {\r\n \"ProductID\": 17,\r\n \"ProductName\": \"Alice Mutton\"\r\n },\r\n {\r\n \"ProductID\": 3,\r\n \"ProductName\": \"Aniseed Syrup\"\r\n },\r\n {\r\n \"ProductID\": 40,\r\n \"ProductName\": \"Boston Crab Meat\"\r\n }] "; 
    var products = JsonConvert.DeserializeObject<List<Product>>(originalJson); 
    var resultObject = new 
    { 
     from_ProductName = products.OrderBy(p => p.ProductName).FirstOrDefault().ProductName, 
     to_ProductName = products.OrderByDescending(p => p.ProductName).FirstOrDefault().ProductName, 
     column_names = new List<string> { nameof(Product.ProductName), nameof(Product.ProductID) }, 
     data = products.Select(p => new List<object> { p.ProductName, p.ProductID }) 
    }; 

    var saveFormat = JsonConvert.SerializeObject(resultObject);  
} 

然后漂亮的打印结果如下:

{ 
    "from_ProductName": "Alice Mutton", 
    "to_ProductName": "Boston Crab Meat", 
    "column_names": ["ProductName", "ProductID"], 
    "data": [["Alice Mutton", 17], 
      ["Aniseed Syrup", 3], 
      ["Boston Crab Meat", 40] ] 
} 
+0

感谢你massmass它工作正常.. –

1

模型类应该是这样的:

public class RootObject 
{ 
    public string from_ProductName { get; set; } 
    public string to_ProductName { get; set; } 
    public List<string> column_names { get; set; } 
    public List<List<object>> data { get; set; } 
} 

测试方法:

public void TestCreateModel() 
{ 
    RootObject rootObject = new RootObject(); 
    rootObject.from_ProductName = "Prod1"; 
    rootObject.to_ProductName = "Prod2"; 
    rootObject.column_names = new List<string>(){"ProductName", "ProductID"}; 
    var dataList = new List<object>() {"Alice Mutton," + 17}; 
    var dataList1 = new List<object>() {"Aniseed Syrup," + 2}; 
    var dataList2 = new List<object>() {"Boston Crab Meat," + 250.1}; 
    rootObject.data = new List<List<object>>() {dataList, dataList1, dataList2}; 

    string JSONString = JsonConvert.SerializeObject(rootObject); 
} 

结果: enter image description here

从jso引发模型类的简单方法n使用简单的工具,如http://json2csharp.com/。现在基本上你只想序列化List<object>列表,改变它并使用上面的模型类。

+0

string JSONString = JsonConvert.SerializeObject(datatable);使用(StreamWriter w = new StreamWriter(HttpContext.Current.Server.MapPath(“〜/ mew12.json”),true)) w.WriteLine(JSONString); } –

+0

这里我如何使用enitity –