关于List对象集合转化成Json字符串,动态赋值问题
本帖最后由 icedong 于 2013-12-23 10:20:05 编辑 论坛上很多都是List中只是简单的一个赋值问题,现在我遇见个问题是List中的对象中还有对象或者对象集合的属性,具体转换代码如下
/// <summary>
/// List对象ToJson
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="list">泛型对象集</param>
/// <returns>返回字符串</returns>
public static string ListToJosn<T>(List<T> list)
{
var json = new StringBuilder();
if (list == null)
{
return json.ToString();
}
if (list.Count > 0)
{
// 反射取得类型的属性等信息
foreach (var processObj in list)
{
if (processObj.GetType().GetProperties().Length > 2)
{
// 进行条目的组装
json.Append("{");
foreach (var property in processObj.GetType().GetProperties())
{
if (property.GetValue(processObj, null).GetType().IsGenericType)
{
json.Append(""" + property.Name + "":{");
var typeOne = property.GetValue(processObj, null).GetType().GetGenericArguments()[0];
// 此处是集合的循环
json.Append(ListToJson<>(property.GetValue(processObj, null) as List<>));
json.Append("},");
}
else
{
json.Append(""" + property.Name + "":"" + property.GetValue(processObj, null) + """);
json.Append(",");
}
}
json.Remove(json.ToString().LastIndexOf(','), 1);
json.Append("}");
}
else
{
json.Append(""" + processObj + """);
}
json.Append(",");
}
json.Remove(json.ToString().LastIndexOf(','), 1);
}
return json.ToString();
}
中间标红的部分,不知道应该如何传泛型的类型,求高手帮助
[解决办法]
Object 类型要可以序列化,用MS提供的方法序列化好好了,读也一样用MS的方法,试试吧
[解决办法]
System.Web.Script.Serialization;
自己造轮子真的那么好玩么?
[解决办法]
public class Serialization
{
/// <summary>
/// Json序列化
/// </summary>
/// <returns></returns>
public static string Serialize<T>(T obj)
{
try
{
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(ms, obj);
byte[] json = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(json, 0, json.Length);
}
catch(Exception ex)
{
Utils.DebugToFile.WriteErr(ex.ToString());
return "";
}
}
/// <summary>
/// Json反序列化
/// </summary>
/// <param name="jsonString"></param>
public static T Deserialize<T>(string jsonString)
{
T t = default(T);
try
{
if (!string.IsNullOrEmpty(jsonString))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
Object obj = serializer.ReadObject(stream);
t = (T)obj;
}
return t;
}
catch(Exception ex)
{
Utils.DebugToFile.WriteErr(ex.ToString());
return t;
}
}
}