json如何使用:叫你如何使用JSON



段时间去个客户那做支持时候看到哥们使用了MS ajax类库使用效果让我觉得很新鲜在服务器端定义些思路方法只要加上ajax库某个属性则可在client-side中直接进行如果服务器端思路方法有返回值在客户端还能接收并像使用服务器端对象我的前直很疑惑为什么能做到如此当时看到在服务器端返回个datatable对象然后就看到在客户端使用这个datatable对象了使用代码和方式就像再写服务器端代码当时很是疑惑自己刚接触web不久最终没能正面帮客户解决使用中个问题而是提供了另种比较笨方式callback后来有幸看到篇介绍JSON文章渐渐思路有点清晰起来猜想应该是在服务器端将某个对象序列化成JSON然后在客户端再将JSON例子化成某个对象为了印证我思路google上果然已经有了很多将对象序列化成JSON代码附上codeproject上个实现:
http://www.codeproject.com/KB/aspnet/ASPNET_DataTable_to_JSON.aspx
还有人专门从Anthem.net中专门剥离出了这部分代码这里也并附上:
public Converter
{
private void WriteDataRow(StringBuilder sb, DataRow row)
{
sb.Append("{");
foreach (DataColumn column in row.Table.Columns)
{
sb.AppendFormat("\"{0}\":", column.ColumnName);
WriteValue(sb, row[column]);
sb.Append(",");
}
// Remove the trailing comma.
(row.Table.Columns.Count > 0)
{
--sb.Length;
}
sb.Append("}");
}

private void WriteDataSet(StringBuilder sb, DataSet ds)
{
sb.Append("{\"Tables\":{");
foreach (DataTable table in ds.Tables)
{
sb.AppendFormat("\"{0}\":", table.TableName);
WriteDataTable(sb, table);
sb.Append(",");
}
// Remove the trailing comma.
(ds.Tables.Count > 0)
{
--sb.Length;
}
sb.Append("}}");
}

private void WriteDataTable(StringBuilder sb, DataTable table)
{
sb.Append("{\"Rows\":[");
foreach (DataRow row in table.Rows)
{
WriteDataRow(sb, row);
sb.Append(",");
}
// Remove the trailing comma.
(table.Rows.Count > 0)
{
--sb.Length;
}
sb.Append("]}");
}

private void WriteEnumerable(StringBuilder sb, IEnumerable e)
{
bool hasItems = false;
sb.Append("[");
foreach (object val in e)
{
WriteValue(sb, val);
sb.Append(",");
hasItems = true;
}
// Remove the trailing comma.
(hasItems)
{
--sb.Length;
}
sb.Append("]");
}

private void WriteHashtable(StringBuilder sb, Hashtable e)
{
bool hasItems = false;
sb.Append("{");
foreach ( key in e.Keys)
{
sb.AppendFormat("\"{0}\":", key.ToLower);
WriteValue(sb, e[key]);
sb.Append(",");
hasItems = true;
}
// Remove the trailing comma.
(hasItems)
{
--sb.Length;
}
sb.Append("}");
}

private void WriteObject(StringBuilder sb, object o)
{
MemberInfo members = o.GetType.GetMembers(BindingFlags.Instance | BindingFlags.Public);
sb.Append("{");
bool hasMembers = false;
foreach (MemberInfo member in members)
{
bool hasValue = false;
object val = null;
((member.MemberType & MemberTypes.Field) MemberTypes.Field)
{
FieldInfo field = (FieldInfo)member;
val = field.GetValue(o);
hasValue = true;
}
((member.MemberType & MemberTypes.Property) MemberTypes.Property)
{
PropertyInfo property = (PropertyInfo)member;
(property.CanRead && property.GetIndexParameters.Length 0)
{
val = property.GetValue(o, null);
hasValue = true;
}
}
(hasValue)
{
sb.Append("\"");
sb.Append(member.Name);
sb.Append("\":");
WriteValue(sb, val);
sb.Append(",");
hasMembers = true;
}
}
(hasMembers)
{
--sb.Length;
}
sb.Append("}");
}

private void WriteString(StringBuilder sb, s)
{
sb.Append("\"");
foreach (char c in s)
{
switch (c)
{
'\"':
sb.Append("\\\"");
;
'\\':
sb.Append("\\\\");
;
'\b':
sb.Append("\\b");
;
'\f':
sb.Append("\\f");
;
'\n':
sb.Append("\\n");
;
'\r':
sb.Append("\\r");
;
'\t':
sb.Append("\\t");
;
default:
i = ()c;
(i < 32 || i > 127)
{
sb.AppendFormat("\\u{0:X04}", i);


}

{
sb.Append(c);
}
;
}
}
sb.Append("\"");
}
public void WriteValue(StringBuilder sb, object val)
{
(val null || val .DBNull.Value)
{
sb.Append("null");
}
(val is || val is Guid)
{
WriteString(sb, val.);
}
(val is bool)
{
sb.Append(val..ToLower);
}
(val is double ||
val is float ||
val is long ||
val is ||
val is ||
val is ||
val is decimal)
{
sb.AppendFormat(CultureInfo.InvariantCulture.NumberFormat, "{0}", val);
}
(val.GetType.IsEnum)
{
sb.Append(()val);
}
(val is DateTime)
{
sb.Append(" Date(\"");
sb.Append(((DateTime)val).("MMMM, d yyyy HH:mm:ss", CultureInfo("en-US", false).DateTimeFormat));
sb.Append("\")");
}
(val is DataSet)
{
WriteDataSet(sb, val as DataSet);
}
(val is DataTable)
{
WriteDataTable(sb, val as DataTable);
}
(val is DataRow)
{
WriteDataRow(sb, val as DataRow);
}
(val is Hashtable)
{
WriteHashtable(sb, val as Hashtable);
}
(val is IEnumerable)
{
WriteEnumerable(sb, val as IEnumerable);
}

{
WriteObject(sb, val);
}
}
public Convert2Json(object o)
{
StringBuilder sb = StringBuilder;
WriteValue(sb, o);
sb.;
}
}
其实msajax library肯定也有相关类实现这样功能Sys.Serialization.JavaScriptSerializer没错就是这个家伙了
最近也在玩玩java对它是越来越有好感了虽然目前为止用不多但有点体会学习java更容易接近事物本质net下封装逐渐将人变成ms组件搬运工了:)
假设我有个类型Car
function Car(make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}
我生成个Car对象并将它发送到服务器端

function sendRequest {
var carr = Car("Dodge", "Coronet R/T", 1968, "yellow");
var pars = "car=" + carr.toJSONString;

var url = "/MyWebApp/JSONTest1";
var mailAjax = Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: jsonResponse
}
);
}

服务器端接收该对象并使用现成类去解析它比如下面介绍JSONObject可以到这个地方下载http://www.json.org/java/index.html .不止这个类还有很多其他

private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
String s3 = request.getParameter("car");
try {
JSONObject jsonObj = JSONObject(s3);
.out.prln(jsonObj.getString("model"));
.out.prln(jsonObj.getInt("year"));
} catch (JSONException e) {
e.prStackTrace;
}
response.getWriter.pr("{ \"name\": \"Violet\", \"occupation\": \"character\" }");
}

很方便很easy...
Tags:  jqueryjson json.js的使用 json使用 json如何使用

延伸阅读

最新评论

发表评论