我们目前使用Newtonsoft.Json将datatable转换为json流。
如果我的datatable包含以下内容:
Name Sales
Joe 10
Mary 20然后,下面的代码将返回[{"Name": "Joe", "Sales":10},{"Name": "Mary", "Sales":20}],这很棒:
string callback = JsonConvert.SerializeObject(table);
byte[] resultBytes = Encoding.UTF8.GetBytes(callback);
return new System.IO.MemoryStream(resultBytes);但有时我需要更复杂的json流。如下所示:
{ "map": "USA", "areas":[{"Name": "Joe", "Sales":10},{"Name": "Mary", "Sales":20}]}
json现在包括一个额外的元组{ "map": "USA", "areas":和一个额外的{}。
我的datatable需要包括什么才能获得这种类型的json流?那么C#需要什么样的外观呢?
发布于 2017-10-13 00:34:19
您需要定义一个新类并序列化整个对象,如下所示:
// Define the class / model
public class MyNewClass {
// Case sensitive vvv to match your Json
public string map {get; set;}
public DataTable areas {get; set;}
// you can have several constructor methods defined, I show the usage for each below.
public MyNewClass() {}
public MyNewClass(string countryMap, DataTable table) {
map = countryMap;
areas = table;
}
}用法:
// Instantiate the object from the class / model
var returnData = new MyNewClass("USA", table);
// or
var returnData2 = new MyNewClass();
returnData2.map = "USA";
returnData2.areas = table;
// Finally serialize your object
var yourJson = JsonConvert.SerializeObject(returnData);
// or
var yourJosn2 = JsonConvert.SerializeObject(returnData2);发布于 2017-10-13 03:33:26
如果您数据源实际上是一个数据库(看起来是这样),那么可以使用numerous advantages of using POCOs over DataTable.
其中之一是可以使用ORM轻松地以方便的形式获取信息。例如,EntityFramework。
对于您的特定复杂示例,流程可能如下所示:
1)定义用于保存数据的类
class Area
{
public string Name { get; set; }
public int Sales { get; set; }
}
class Map
{
public string Map { get; set; }
public List<Area> Areas { get; set; }
}2)填充数据库中的数据
3)使用JsonConvert.SerializeObject序列化区域。
https://stackoverflow.com/questions/46714304
复制相似问题