现在的位置: 首页 > 综合 > 正文

json 学习

2013年04月22日 ⁄ 综合 ⁄ 共 5468字 ⁄ 字号 评论关闭

http://www.blogjava.net/woxingwosu/archive/2008/01/24/133301.html

json 学习的一个博客

 http://msdn.microsoft.com/zh-cn/library/bb299886.aspx

JavaScript 和 .NET 中的 JavaScript Object Notation (JSON) 简介
讲序列化的

 
json都是开源的,因为json是伴随着ajax出现的,因为ajax都是开源的,所以json都开源了.
 
要学习json首先要理解json是什么,javascript object notation是他的全称,

JSON 是依据 JavaScript 中文字对象表示法的子集所创建的数据交换格式。虽然 JavaScript 可接受的文字值语法非常灵活,不过必须注意,JSON 的规则要严格得多。例如,根据 JSON 标准,对象成员的名称必须为有效的 JSON 字符串。JSON 中的字符串必须用引号括起来。而 JavaScript 则允许对象成员以引号或撇号分隔,或者完全省略引号(只要成员名称与保留的 JavaScript 关键字不冲突)。同样,JSON 中的数组元素或对象成员值仅限于一个非常有限的集合。然而,在 JavaScript 中,数组元素和对象成员值几乎可以指一切有效的 JavaScript 表达式,包括函数调用和定义!

JSON 的优点在于它的简单性。根据 JSON 标准设置格式的消息由单个顶层对象或数组组成。数组元素和对象值可以是对象、数组、字符串、数字、布尔值(true 和 false)或 null。简言之,这就是 JSON 标准!就是如此简单。有关该标准更正式的说明,请参见 www.json.orgRFC 4627

 

微软在.net FrameWork3.5中已经有了序列化成json的类和方法了.

 

理解了json只是一种数据格式而已,完全可以被xml替代,只不过他有比xml更优越的地方,是被javascript原生支持的.

那么要学习json 那么就要实现这几步:

1、javascript创建解析

2、服务端创建解析

3、客户端和服务端进行交互

4、如果采用ext框架,就需要再补上ext一课。

 

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);
}

抱歉!评论已关闭.