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