C# 将Datatable转换为不带表头的JSON
我正在尝试将datatable转换为JSON。我可以得到它,但问题是我得到的属性名与序列化结果字符串中的表头相对应:C# 将Datatable转换为不带表头的JSON,c#,sql,json,datatable,C#,Sql,Json,Datatable,我正在尝试将datatable转换为JSON。我可以得到它,但问题是我得到的属性名与序列化结果字符串中的表头相对应: private string TestForEach(DataTable table) { var categoryList = new List<FilterCountry>(table.Rows.Count); foreach (DataRow row in table.Rows) {
private string TestForEach(DataTable table)
{
var categoryList = new List<FilterCountry>(table.Rows.Count);
foreach (DataRow row in table.Rows)
{
var values = row.ItemArray;
var category = new FilterCountry()
{
Country = values[0].ToString(),
Count = (Int32)values[1]
};
categoryList.Add(category);
}
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
return serializer.Serialize(categoryList);
}
但我不需要字符串中的属性名称,我只需要:
"China":2,"India":3,"Pakistan":3,"United Arab Emirates":5
您需要实现和使用。在您的情况下,它可能如下所示:
public class FilterCountryListConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var output = new Dictionary<string, object>();
List<FilterCountry> filters = obj as List<FilterCountry>;
filters.ForEach( f => output.Add( f.Country, f.Count ) );
return output;
}
public override IEnumerable<Type> SupportedTypes
{
get { return new List<Type>(new List<Type>(new Type[] { typeof(List<FilterCountry>) })); }
}
}
然后您将得到如下输出:
{“中国”:2,“印度”:2,“巴基斯坦”:3,“阿拉伯联合酋长国”:5}
要获得预期的输出,您需要编写字符串操作代码,而不是使用序列化。
public class FilterCountryListConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var output = new Dictionary<string, object>();
List<FilterCountry> filters = obj as List<FilterCountry>;
filters.ForEach( f => output.Add( f.Country, f.Count ) );
return output;
}
public override IEnumerable<Type> SupportedTypes
{
get { return new List<Type>(new List<Type>(new Type[] { typeof(List<FilterCountry>) })); }
}
}
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new FilterCountryListConverter() });
var res = serializer.Serialize(categoryList);