读书人

关于List对象集合转化成Json字符串动

发布时间: 2014-06-08 16:40:14 作者: rapoo

关于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;
}
}
}


[解决办法]


不说啥了,请自己google

"System.Web.Script.Serialization"
"json.net"
"newtonsoft.json"

读书人网 >C#

热点推荐