我们目前使用Newtonsoft.Json
将数据表转换为json
流。
如果我的数据表包含以下内容:
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":
和一个额外的{}
。
我的数据表需要包含什么才能获得这种类型的json流? C#需要看起来像什么?
答案 0 :(得分:0)
您需要定义一个新类并序列化整个对象,如下所示:
// 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);
答案 1 :(得分:0)
如果您的数据源实际上是一个数据库(看起来像是这样),那就有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
序列化区域。