unity3d请求json数据并解析







Client:

using UnityEngine;
using System.Collections;
using LitJson;


public class GetPhotoList : MonoBehaviour {


    // Use this for initialization
    void Start () {
        StartCoroutine(GetPhotos());
    }
    
    // Update is called once per frame
    IEnumerator GetPhotos(){    
        WWWForm    form = new WWWForm();
        form.AddField("id","123");
        WWW w = new WWW("http://localhost:36944/GetPhotoList.ashx",form);
        while (!w.isDone){yield return new WaitForEndOfFrame();}
        if (w.error != null){Debug.LogError(w.error);}
        Debug.Log(w.text);        
        JsonData jd = JsonMapper.ToObject(w.text);
        for (int i = 0; i < jd.Count; i++)
        {            
            Debug.Log("id=" + jd[i]["id"]);
            Debug.Log("name=" + jd[i]["name"]);
        }
        
    }
}



Server:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization.Json;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.IO;


namespace UpdatePhoto
{
    /// <summary>
    /// GetPhotoList 的摘要说明
    /// </summary>
    public class GetPhotoList : IHttpHandler
    {


        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string id = context.Request.Form["id"];
            string path = context.Request.PhysicalApplicationPath;
            //context.Response.Write("Hello World");
            List<Photo> photos = GetPhotos(id,path);
            DataContractJsonSerializer djson = new DataContractJsonSerializer(photos.GetType());
            djson.WriteObject(context.Response.OutputStream, photos);
        }


        public List<Photo> GetPhotos(string id,string path)
        {
            //获取目录
            string localPath = path+id + "\\"; 
            //读取目录下的文件
            if (!Directory.Exists(localPath)) return null;
            string[] files = Directory.GetFiles(localPath);
            List<Photo> photos = new List<Photo>();
            foreach (string file in files)
            {
                string filename = file.Substring(file.LastIndexOf('\\')+1);
                Photo p = new Photo();
                p.name = filename;
                p.id = id;
                photos.Add(p);
            }




            return photos;
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }


    public class Photo
    {
        public string id;
        public string name;
    }
}







unity3d--json传递中文错问问题解决

论坛里看到了一种web下替代xml的解决方案--json,json是一种轻量级的数据交换格式,类似于xml,但是比xml更加轻便,一般用在ajax的数据传输。

但是照着论坛里的方式做了一遍,却出现了问题

在u3d中用eval把得到的字符串放进hashtable时,却报错,把php文件和js文件都改成utf-8也继续报错

很是焦虑

后来无意中发现了u3d中的脚本编辑器有一个utf-8 with BOM,对这个bom产生了怀疑

查了一下

UTF-8之BOM含义,UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行,没想到困惑我很久的居然是UTF-8编码的BOM,之前在部分采用UTF-8编码的页面会平白多出一个空行,使用DREAMWEAVER编辑网页的时候,采用UTF-8编码时会自动为网页添加BOM签名,于是问题就产生了,使用最新的EDITPLUS 2.30版可以去除BOM,这样,我的网页就不再多出一个空行,但非常奇怪的问题就是,我之前用PHP生成的静态页面没有空行,而采用HTML文件作为模版的网页会自动多出一个空行

有这么个解释,貌似是不建议使用bom方式的utf-8编码,可是记事本另存为居然没有这一项

用ue打开,另存为时,在选择格式时,有一项utf-8 without BOM,确定,哈哈哈哈哈

狂喜中,居然成功了,看来都是编码格式惹的祸


痛定思痛,如果要用这种数据交换格式来下载和上传数据时,一定要注意每一个脚本文件的编码格式









EditPlus 是一款由韩国 Sangil Kim 出品的体积小巧但是功能强大的专可完美替代 Windows 记事本组件的纯文本编辑软件,同时它也是程序员们非常热衷且给予一致好评的代码编辑器之一。 拥有无限制的撤消与重做以及英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览等功能,可以说是一款不折不扣的多功能可便携式的文本编辑工具。 EditPlus 也为广大网页编程高手和程序员们提供了诸多便利。作为文字编辑器它还有一项好用的功能即剪贴板动态监测功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,进而让你省去复制后再粘贴的步骤。 EditPlus 也是一款非常好用的 HTML 编辑器,除了支持颜色标记及 HTML 标记,也支持 C、C++、Perl、Java 等程序语言的编辑和保存。 另外,EditPlus 还内建完整的 HTML 及 CSS1 指令功能,对于习惯用记事本编辑网页的朋友,它可帮你节省一半以上的网页制作时间,若你有安装 IE 3.0 以上版本,它还会结合 IE 浏览器于 EditPlus 窗口中,让你可以直接预览编辑好的网页(若没安装IE,也可指定其他浏览器路径)。因此,它是一个相当棒又多用途多状态的编辑软件 功能&特点: 1、默认支持 HTML、CSS、PHP、C/C++、Java、JavaScript 和 VBScript 等语法高亮显示,通过定制语法文件,可以扩展到其他程序语言; 2、EditPlus 提供了与 Internet 的无缝连接,可以在 EditPlus 的工作区域中打开 Intelnet 浏览窗口; 3、提供了多工作窗口。不用切换到桌面,便可在工作区域中打开多个文档; 4、正确地配置 Java 的编译器“Javac”以及解释器“Java”后,使用 EditPlus 的菜单可以直接编译执行 Java 程序; 总之,EditPlus 功能强大,界面简洁美观,且启动速度快;中文支持比较好;支持语法高亮;支持代码折叠;支持代码自动完成,不支持代码提示功能;配置功能强大,且比较容易,扩展也比较强。 像 php、Java 程序等的开发环境,只要看一下资料,几分钟就可以搞定配置,很适合初学者学习使用。有不错的项目工程管理功能。内置浏览器功能,这一点对于网页开发者来说很是方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值