首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

对JSON是在是第一回接触:net解析JSON,收不到传递的数组

2013-03-13 
对JSON是在是第一次接触:.net解析JSON,收不到传递的数组本帖最后由 wuhuanghao 于 2013-03-06 18:11:54 编

对JSON是在是第一次接触:.net解析JSON,收不到传递的数组
本帖最后由 wuhuanghao 于 2013-03-06 18:11:54 编辑 以下为传递的JSON方法:


var prsonjosn = { 'Id': '', 'Name': '','Title': '' };
 prsonjosn.Id = mfi_id; 
 prsonjosn.Title = titleTemp; //title
 prsonjosn.Name = mfi_name; //厂商名称
 var jsonStr = "";
  $.each(prsonjosn, function (i, n) {
            jsonStr = jsonStr + """ + i + "":" + """ + n + "","
        });
        if (jsonStr == "") {
            art.alert("失败");
            return true;
        }
        jsonStr = jsonStr.substring(0, jsonStr.length - 1);
        jsonStr = "{" + jsonStr + "}";
        alert(jsonStr);//检测过,数据内容格式都正确的
        $.post("AddOne.aspx?StrJson=" + { JsonStr: jsonStr },


JSON解析类:


public class YlObj  
 {  
     [DataMember]
     public int Id { get; set; }  
     [DataMember]
     public string Name { get; set; }  
     [DataMember]
     public string Title { get; set; }


     public YlObj(int Id_, string Name_, string Title_)
     {
         Id = Id_;
         Name = Name_;
         Title = Title_;
     } 

   } 



序列化和反序列化方法


public class Json
    {
      public static string ToJsJson(object item)  
      {  
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());  
        using(MemoryStream ms=new MemoryStream())  
        {  
            serializer.WriteObject(ms, item);  
            StringBuilder sb = new StringBuilder();  
            sb.Append(Encoding.UTF8.GetString(ms.ToArray()));  
            return sb.ToString();  
        }  
    }  


  
    //反序列化   
  
    public static T FromJsonTo<T>(string jsonString)  
    {  
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))  
        {  
            T jsonObject = (T)ser.ReadObject(ms);  
            return jsonObject;  
        }  
    } 

    }



页面后台接收测试:


 string jsonStr = Request["JsonStr"];
 List<YlObj> obj = Json.FromJsonTo<List<YlObj>>(jsonStr);
 string i = string.Empty;
 foreach (YlObj item in obj)
 {
   i = item.RMP_Title.ToString();
 }
 Response.Write("<script>alert('" + i + "');</script>");
 Response.End(); 


注意这里:$.post("AddOne.aspx?JsonStr=" + { JsonStr: jsonStr }
无任何反应。
然后后我直接在页面上提交:
AddOne.aspx?JsonStr={"Id":"0","Name":"其他","Title":"吉林"


 Response.Write("<script>alert('" + i + "');</script>");结果为空???
[解决办法]
你这样的传值 为什么不用
AddOne.aspx?Id=xxx&Name=xxx&title=xxx

这样的方式传值呢
[解决办法]
string jsonStr = Request["JsonStr"];

监视jsonstr应该空的
[解决办法]
引用:
引用:你这样的传值 为什么不用


这样的方式传值呢

哥哥,我是通过JS,post方式传的。


$.post("AddOne.aspx?Id=xxx&Name=xxx&title=xxx",function(){});

或者
$.post("AddOne.aspx",{"Id":"xxx","Name":"xxx","title":'xxx'},function(){

})

这个是推荐的写法
[解决办法]
你请求后  后台得到的jsonStr 值是{"Id":"0","Name":"其他","Title":"吉林"}这样的不

如果是的话 


 string jsonStr = Request["JsonStr"];
//你的JSON字符串中没有含[ ]这样的json数组符合 可能无法反序列话成List
YlObj obj = Json.FromJsonTo<YlObj>(jsonStr);

 string i = string.Empty;
i = obj.Title;

 Response.Write("<script>alert('" + i + "');</script>");
 Response.End(); 

热点排行