http://www.blogjava.net/woxingwosu/archive/2008/01/24/133301.html
json 学习的一个博客
http://msdn.microsoft.com/zh-cn/library/bb299886.aspx
JSON 是依据 JavaScript 中文字对象表示法的子集所创建的数据交换格式。虽然 JavaScript 可接受的文字值语法非常灵活,不过必须注意,JSON 的规则要严格得多。例如,根据 JSON 标准,对象成员的名称必须为有效的 JSON 字符串。JSON 中的字符串必须用引号括起来。而 JavaScript 则允许对象成员以引号或撇号分隔,或者完全省略引号(只要成员名称与保留的 JavaScript 关键字不冲突)。同样,JSON 中的数组元素或对象成员值仅限于一个非常有限的集合。然而,在 JavaScript 中,数组元素和对象成员值几乎可以指一切有效的 JavaScript 表达式,包括函数调用和定义!
JSON 的优点在于它的简单性。根据 JSON 标准设置格式的消息由单个顶层对象或数组组成。数组元素和对象值可以是对象、数组、字符串、数字、布尔值(true 和 false)或 null。简言之,这就是 JSON 标准!就是如此简单。有关该标准更正式的说明,请参见 www.json.org 或 RFC 4627。
微软在.net FrameWork3.5中已经有了序列化成json的类和方法了.
理解了json只是一种数据格式而已,完全可以被xml替代,只不过他有比xml更优越的地方,是被javascript原生支持的.
那么要学习json 那么就要实现这几步:
1、javascript创建解析
2、服务端创建解析
3、客户端和服务端进行交互
4、如果采用ext框架,就需要再补上ext一课。
1
2
服务端创建和解析:
public string ToJSONString(int employeeID, string employeeName, string[] employeeInfo)
{
Employee employee = new Employee();
employee.EmployeeID = employeeID;
employee.EmployeeName = employeeName;
employee.EmployeeInfo = employeeInfo;
return JavaScriptConvert.SerializeObject(employee);
}
这种方式适合用代码生成工具生成的实体类。
Employee decerializedEmployee = (Employee)JavaScriptConvert.DeserializeObject(strJSON, typeof(Employee));
return "ID: " + decerializedEmployee.EmployeeID + "/n"
+ "Name: " + decerializedEmployee.EmployeeName + "/n"
+ "Info: " + decerializedEmployee.EmployeeInfo.ToString();
}
以上两个函数是采用了json.net来实现的。
jayrock可以这么做:
using (JsonWriter writer = new JsonTextWriter(Console.Out))
{
string[] continents = {
"Europe", "Asia", "Australia", "Antarctica", "North America", "South America", "Africa"
};
writer.WriteStartArray();
Array.ForEach(continents, writer.WriteString);
writer.WriteEndArray();
}
using (JsonWriter writer = new JsonTextWriter(Console.Out))
{
writer.WriteStartObject(); // {
writer.WriteMember("Name"); // "Name" :
writer.WriteString("John Doe"); // "John Doe",
writer.WriteMember("PermissionToCall"); // "PermissionToCall" :
writer.WriteBoolean(true); // true,
writer.WriteMember("PhoneNumbers"); // "PhoneNumbers" :
writer.WriteStartArray(); // [
WritePhoneNumber(writer, // { "Location": "Home",
"Home", "555-555-1234"); // "Number": "555-555-1234" },
WritePhoneNumber(writer, // { "Location": "Work",
"Work", "555-555-9999 Ext. 123"); // "Number": "555-555-9999 Ext. 123" }
writer.WriteEndArray(); // ]
writer.WriteEndObject(); // }
}
服务器读取客户端输入的解析代码:
protected void valUser()
{
//System.Threading.Thread.Sleep(2000);
Stream instream = Page.Request.InputStream;
BinaryReader br = new BinaryReader(instream, System.Text.Encoding.UTF8);
byte[] byt = br.ReadBytes((int)instream .Length );
string str = System.Text.Encoding.UTF8.GetString(byt);
name n = (name)JavaScriptConvert.DeserializeObject(str, typeof(name));
string result = "";
if (n.user != Label1.Text)
{
result="用户不存在!";
}
if (n.password != Label2.Text)
{
result += "密码不对!";
}
Response.Write(result);
Response.End();
}
public class name
{
private string _name, _password;
public string user
{
get { return _name; }
set { _name = value; }
}
public string password
{
get { return _password; }
set { _password = value; }
}
}
这种笨方法实现的json:
public static string GetJSON(DataSet Ds, string StrTableName)
{
StringBuilder sb = new StringBuilder();
//sb.AppendLine("{");
//sb.AppendLine(" " + StrTableName + ":{");
sb.AppendLine("[");
try
{
for (int j = 0; j < Ds.Tables[0].Rows.Count;j++ )
{
sb.Append(" {");
for (int i = 0; i < Ds.Tables[0].Columns.Count; i++)
{
sb.AppendFormat("{0}:'{1}',", Ds.Tables[0].Columns[i].ColumnName, Ds.Tables[0].Rows[i][Ds.Tables[0].Columns[i].ColumnName].ToString());
}
sb.Remove(sb.ToString().LastIndexOf(','), 1);
sb.AppendLine("},");
}
sb.Remove(sb.ToString().LastIndexOf(','), 1);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
sb.AppendLine(" ];");
//sb.AppendLine(" }");
//sb.AppendLine(" };");
return sb.ToString();
}
ajax 发送数据的方式:
creatHttpXmlRequest();
var url="default.aspx?time="+new Date().getTime();
var userDate=getUserAndPassword();//得到JSON
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=stateChange;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(userDate);//发送userDate
//转换JSON
function getUserAndPassword()
{
var nam=document.getElementById('Text1').value;
var pas=document.getElementById('Password1').value;
var date={user:nam,password:pas}
return JSON.stringify(date);
}