/* * by zhangguozhan 2015/1/5 * P2B.Common.CJson.ConvertJson.ObjectToJson<SenderDomainModel>方法无法序列号只读属性。下面的实现填补了这个不足 */ /// <summary> /// 将对象转换成JSON字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string ObjectToJson<T>(T obj) where T : class { if (obj == null) return "object null"; string json = string.Empty; var properties = obj.GetType().GetProperties(); if (properties == null || !properties.Any()) return json; foreach (var property in properties) { if (!property.CanRead) continue; if (property.MemberType != System.Reflection.MemberTypes.Property) continue; string pName = property.Name; var pValue = property.GetValue(obj, null); if (/*property.PropertyType*/pValue is System.ValueType || pValue is string) { json += string.Format(","{0}":"{1}"", pName, pValue == null ? "null" : pValue); } else { string subValue = string.Empty; if (pValue is System.Collections.IList) { var list = (pValue as System.Collections.IList); if (list.Count > 0) { string subJsons = string.Empty; foreach (var item in list) { subJsons += "," + ObjectToJson(item); } if (!string.Empty.Equals(subJsons)) subValue = subJsons.Substring(1); } } else { subValue = ObjectToJson(pValue); } if (!string.Empty.Equals(subValue)) { json += string.Format(","{0}":[{1}]", pName, subValue); } } } if (json.Length > 0) json = "{" + json.Substring(1) + "}"; return json; }