Unity3d LitJson

LitJSON是一个.NET平台下处理JSON格式数据的类库,小巧、快速。它的源代码使用C#编写,可以通过任何.Net平台上的语言进行调用。

开放前先添加引用LitJson.dll,再导入命名空间 using LitJson,可以到http://litjson.sourceforge.net去下载。

LitJSON,核心点就是数据的传输和获取。

实例如下:

一:JsonWriter、JsionData、JsonMapper,单个一一对应数据;

获取需要"传输"给服务器的Json数据:

string clientStr(){

string jsonStr="{"userid":"12","userName":"wuk","userpassword":"8912","item":"f"}";

string jsonStr="{"userid":"12","userName":"wuk","userpassword":"8912","item":{"1":"f","2":"g"}}";

System.Text.StringBuilder sb=new System.Text.StringBuilder();

LitJson.JsonWriter writer=new LitJson.JsonWrite(sb);

writer.WriteObjectStart();

writer.WritePropertyName("userid");

writer.Write(12);

............

writer.WriteObjectEnd();

return sb.ToString();

}

解析服务器返回的Json数据:JsonMapper

void ResolveJson(string str){

// 完全知道Json每个选项的数据类型;

JsonData jData=JsonMapper.ToObject(str);

  string  userID = (string)jdata2["userid"];

// 不完全知道Json每个数据类型

  JsonReader reader = new JsonReader (json);

  while (reader.Read())
        {
            string type = reader.Value != null ? reader.Value.GetType().ToString() : "";

    根据reader.Value.GetType(),做相关数据类型;

        }

}

二,数据类,传输数据。我个人偏向于此方式;

class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
    }

获取需要"传输"给服务器的Json数据:

    public string PersonToJson()
        {
            Person bill = new Person();
            bill.Name = "www.87cool.com";
            bill.Age = 3;
            bill.Birthday = new DateTime(2007, 7, 17);
       string json_bill = JsonMapper.ToJson(bill);

    return json_bill;
        }

解析服务器返回的Json数据:JsonMapper

 

public Person getJsonPerson(string  str){

Person   person=  JsonMapper.ToObject<Person>(str);

return person;

}

 

三,网络通信:HTTP,短连接;

void sendRequst(string str,string url){

HTTP.Request  request= HTTP.Request("POST",url);

 

 request.SetHeader("Content-Type", "application/json");

 request.Text = str;

        request.Send();

        request.useCache = false;

        while (!request.isDone) yieldreturnnewWaitForEndOfFrame();

        if (request.exception != null)

            Debug.LogError(request.exception);

        else

        {

            var response = request.response;

            Debug.Log(response.status);//200:成功

            Debug.Log(response.Text);

            ResolveJson(response.Text);

        }

 

}

 

posted @ 2013-06-05 12:01  韦斯利yx  阅读(820)  评论(0编辑  收藏  举报