model
public class ProjectActivityType { public ProjectActivityType() { } #region Model private string _projectid; private int _activitytypeid; private int _persons; private int _maleleast; private int _malemost; private int _ladyleast; private int _ladymost; /// <summary> /// /// </summary> public string ProjectID { set { _projectid = value; } get { return _projectid; } } /// <summary> /// 活动类型ID /// </summary> public int ActivityTypeID { set { _activitytypeid = value; } get { return _activitytypeid; } } /// <summary> /// 标准人数(按最小人数比对) /// </summary> public int Persons { set { _persons = value; } get { return _persons; } } /// <summary> /// 男最少人数 /// </summary> public int MaleLeast { set { _maleleast = value; } get { return _maleleast; } } /// <summary> /// 男最多人数 /// </summary> public int MaleMost { set { _malemost = value; } get { return _malemost; } } /// <summary> /// 女最小人数 /// </summary> public int LadyLeast { set { _ladyleast = value; } get { return _ladyleast; } } /// <summary> /// 女最多人数 /// </summary> public int LadyMost { set { _ladymost = value; } get { return _ladymost; } } #endregion Model }
JS类
function ProjectActivityType(ProjectID, ActivityTypeID, Persons, MaleLeast, MaleMost, FemaleLeast, FemaleMost, ActivityTypeName) { this.ActivityTypeName = ActivityTypeName; this._projectid = ProjectID; this._persons = Persons; this._maleleast = MaleLeast; this._malemost = MaleMost; this._ladyleast = FemaleLeast; this._ladymost = FemaleMost; this._activitytypeid = ActivityTypeID; }
js类与model类里的属性相对应 js中可以多出属性但不可以少属性 多出属性不影响序列化
js 对象 new
var ProjectActivityTypeObjArray = new Array(); ProjectActivityTypeObjArray[ProjectActivityTypeObjArray.length]=new ProjectActivityType("", ActivityTypeID, Persons, MaleLeast, MaleMost, FemaleLeast, FemaleMost, ActivityTypeName);
由于我要多个对象 这里我用了个数组来存储这些对象
js对象转json
/**js对象序列化的方法**/ function ObjToJSON(o) { if (o == null) return "null"; switch (o.constructor) { case String: var s = o; // .encodeURI(); if (s.indexOf("}") < 0) s = '"' + s.replace(/(["\\])/g, '\\$1') + '"'; s = s.replace(/\n/g, "\\n"); s = s.replace(/\r/g, "\\r"); return s; case Array: var v = []; for (var i = 0; i < o.length; i++) v.push(ObjToJSON(o[i])); if (v.length <= 0) return "\"\""; return "[" + v.join(",") + "]"; case Number: return isFinite(o) ? o.toString() : ObjToJSON(null); case Boolean: return o.toString(); case Date: var d = new Object(); d.__type = "System.DateTime"; d.Year = o.getUTCFullYear(); d.Month = o.getUTCMonth() + 1; d.Day = o.getUTCDate(); d.Hour = o.getUTCHours(); d.Minute = o.getUTCMinutes(); d.Second = o.getUTCSeconds(); d.Millisecond = o.getUTCMilliseconds(); d.TimezoneOffset = o.getTimezoneOffset(); return ObjToJSON(d); default: if (o["toJSON"] != null && typeof o["toJSON"] == "function") return o.toJSON(); if (typeof o == "object") { var v = []; for (attr in o) { if (typeof o[attr] != "function") v.push('"' + attr + '": ' + ObjToJSON(o[attr])); } if (v.length > 0) return "{" + v.join(",") + "}"; else return "{}"; } // alert(o.toString()); return o.toString(); } };
这段代码是从网上找的 然后稍作改进 可以序列化数组 和 单个对象
后台c# json 转对象
//转换List 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; } } //转换单个对象 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); } }
c#方法调用
//list String ProjectActivityTypeModelStr = Framework.RequestHelper.GetFormString("ProjectActivityTypeModel"); List<Model.ProjectActivityType> patModel = Framework.Json.JsonConvert.Json2Obj(ProjectActivityTypeModelStr, typeof(List<Model.ProjectActivityType>)) as List<Model.ProjectActivityType>; //这是单个对象方法的调用 Model.ProjectBase pbModel = Framework.Json.JsonConvert.Json2Obj<Model.ProjectBase>(ProjectBaseModelStr);
其中遇到的问题
日期格式一直是json的一块痛啊
date 转json
function GetJsonDateTime(d) { if (d == "NaN") d = new Date(1970, 0, 1, 0, 0, 0); return "\/Date(" + d.valueOf() + ")\/"; }
这篇文章主要介绍的json 反序列化 其他的就比较简单了 网上搜搜一大堆 不累述了