C#中如何将List⾃定义转为Json格式及相关函数-DataContractJsonSe。。。对C#和使⽤List<⾃定义>和Json格式相互转化的⽅法进⾏总结 关于JSON的⼊门介绍见,或者百度,这⾥不赘述,不过通过下⾯的例⼦会有个更快捷和更直观的认识。
如Json格式[{"id":"1","name":"sara"},{"id":"2","name":"sara2"}]
⾃定义数据类型,⽤于List<>:
[DataContract]
class Person {
[DataMember]
public int id;
[DataMember]
public string name;
}
程序中使⽤:
⾸先加⼊引⽤:
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
using System.Text;
代码内容:
class Program
{
static void Main(string[] args)
{
/
/Product.GetAllSmartPhones();
nums.Add(new Person() {
id=1,
name="sara"
});
nums.Add(new Person() {
id=1,
name="sylar"
});
DataContractJsonSerializer json = new DataContractJsonSerializer(nums.GetType());
string szJson = "";
/
/序列化
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, nums);
szJson = Encoding.UTF8.GetString(stream.ToArray());
}
Console.WriteLine(szJson);
Console.ReadLine();
}
}
⼯程化时,可以对⾃定义数据结构重新定义⼀个类:
如:
public class TestListResult<T> : List<T>
{
public TestListResult()
{
this.Successed = false;
this.Message = "";
}
public bool Successed { get; set; }
public string Message { get; set; }
}
使⽤时同上在⼀个⽂件⾥⼀样
理解了以上原理,可以使⽤以下函数在项⽬中使⽤:
List<T>转Json
[html]
1. public static string Obj2Json<T>(T data)
2. {
3. try
泰州名流剑桥
4. {
5. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
6. using (MemoryStream ms = new MemoryStream())
7. {
8. serializer.WriteObject(ms, data);
9. return Encoding.UTF8.GetString(ms.ToArray());
10. }
11. }
12. catch
13. {
14. return null;
15. }
16. }
public static string Obj2Json<T>(T data)
{
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, data);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
catch
{
return null;
}
}
Json转List<T>
[html]
1. public static Object Json2Obj(String json,Type t)
2. {
3. try
4. {
5. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
6. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
7. {
8.
9. return serializer.ReadObject(ms);
10. }
11. }
12. catch
13. {
14. return null;
15. }
16. }
public static Object Json2Obj(String json,Type t)
{
约翰萨顿
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
return serializer.ReadObject(ms);
}
}
catch
{
return null;
}
}
DataTable 转Json
[html]
1. public static string DataTable2Json(DataTable dt)
2. {
3. if (dt.Rows.Count == 0)
4. {
5. return "";
6. }
7.
8. StringBuilder jsonBuilder = new StringBuilder();
9. // jsonBuilder.Append("{");
10. //jsonBuilder.Append(dt.TableName.ToString());
11. jsonBuilder.Append("[");//转换成多个model的形式
12. for (int i = 0; i < dt.Rows.Count; i++)
13. {
14. jsonBuilder.Append("{");
15. for (int j = 0; j < dt.Columns.Count; j++)
16. {
17. jsonBuilder.Append("\"");
18. jsonBuilder.Append(dt.Columns[j].ColumnName);
19. jsonBuilder.Append("\":\"");
20. jsonBuilder.Append(dt.Rows[i][j].ToString());
21. jsonBuilder.Append("\",");
22. }
23. jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
24. jsonBuilder.Append("},");
25. }
26. jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
27. jsonBuilder.Append("]");
28. // jsonBuilder.Append("}");
29. return jsonBuilder.ToString();
30. }
public static string DataTable2Json(DataTable dt)
{
if (dt.Rows.Count == 0)
{
return "";
}
StringBuilder jsonBuilder = new StringBuilder();
// jsonBuilder.Append("{");
//jsonBuilder.Append(dt.TableName.ToString());
jsonBuilder.Append("[");//转换成多个model的形式
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
// jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
单个对象转JSON
[html]
1. public static T Json2Obj<T>(string json)
2. {
3. T obj = Activator.CreateInstance<T>();
4. using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
5. {
6. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
7. return (T)serializer.ReadObject(ms);
8. }
9. }
public static T Json2Obj<T>(string json)
{
T obj = Activator.CreateInstance<T>();
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
将函数封装成类,更便于项⽬中引⽤:
[html]
1. public class JsonHelper
2. {
3. /// <summary>太平洋cs
4. /// ⽣成Json格式
5. /// </summary>
6. /// <typeparam name="T"></typeparam>
7. /// <param name="obj"></param>
8. /// <returns></returns>
9. public static string GetJson<T>(T obj)
10. {
超固态11. DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
12. using (MemoryStream stream = new MemoryStream())
13. {
14. json.WriteObject(stream, obj);
15. string szJson = Encoding.UTF8.GetString(stream.ToArray());
16. return szJson;
17. }
18. }
19. /// <summary>
20. /// 获取Json的Model
21. /// </summary>
22. /// <typeparam name="T"></typeparam>
23. /// <param name="szJson"></param>
24. /// <returns></returns>
25. public static T ParseFromJson<T>(string szJson)
26. {
27. T obj = Activator.CreateInstance<T>();
28. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
29. {
30. DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
31. return (T)serializer.ReadObject(ms);
32. }
33. }
34. }
public class JsonHelper
{
/// <summary>
/// ⽣成Json格式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
string szJson = Encoding.UTF8.GetString(stream.ToArray());
return szJson;
}
}
/// <summary>
/// 获取Json的Model
/// </summary>
/
// <typeparam name="T"></typeparam>
/// <param name="szJson"></param>
/// <returns></returns>
public static T ParseFromJson<T>(string szJson)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}
[html]
1. /// <summary>
2. /// 反回JSON数据到前台
3. /// </summary>
4. /// <param name="dt">数据表</param>
5. /// <returns>JSON字符串</returns>
6. public string DataTableToJson(DataTable dt)
7. {
8. StringBuilder JsonString = new StringBuilder();
9. if (dt != null && dt.Rows.Count > 0)
中国中药杂志10. {
11. JsonString.Append("{ ");
12. JsonString.Append("\"TableInfo\":[ ");
13. for (int i = 0; i < dt.Rows.Count; i++)
14. {
15. JsonString.Append("{ ");
16. for (int j = 0; j < dt.Columns.Count; j++)
17. {
18. if (j < dt.Columns.Count - 1)
19. {
20. JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
21. }
22. else if (j == dt.Columns.Count - 1)
23. {
24. JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
25. }
26. }
27. if (i == dt.Rows.Count - 1)
28. {
29. JsonString.Append("} ");
30. }
31. else
32. {
33. JsonString.Append("}, ");
34. }
35. }
36. JsonString.Append("]}");
37. return JsonString.ToString();
38. }
39. else
40. {
41. return null;
42. }
43. }
/// <summary>
/// 反回JSON数据到前台
/// </summary>
/// <param name="dt">数据表</param>
/// <returns>JSON字符串</returns>
public string DataTableToJson(DataTable dt)
{
StringBuilder JsonString = new StringBuilder();
if (dt != null && dt.Rows.Count > 0)
{
JsonString.Append("{ ");
JsonString.Append("\"TableInfo\":[ ");
for (int i = 0; i < dt.Rows.Count; i++)
{
JsonString.Append("{ ");
for (int j = 0; j < dt.Columns.Count; j++)
{
if (j < dt.Columns.Count - 1)
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
}
else if (j == dt.Columns.Count - 1)
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
}
}
if (i == dt.Rows.Count - 1)
{
JsonString.Append("} ");
}
else
{
JsonString.Append("}, ");
}
}
JsonString.Append("]}");
return JsonString.ToString();
}
else
{
return null;
}
}
1. public static class JsonTableHelper
姚海星2. {
3. /// <summary>
4. /// 返回对象序列化
5. /// </summary>
6. /// <param name="obj">源对象</param>
7. /// <returns>json数据</returns>
8. public static string ToJson(this object obj)
9. {
10. JavaScriptSerializer serialize = new JavaScriptSerializer();
11. return serialize.Serialize(obj);
12. }
13.
14. /// <summary>
15. /// 控制深度
16. /// </summary>
17. /// <param name="obj">源对象</param>
18. /// <param name="recursionDepth">深度</param>