GVKun编程网logo

泛型/ JSON JavaScriptSerializer C#(java泛型)

29

这篇文章主要围绕泛型/JSONJavaScriptSerializerC#和java泛型展开,旨在为您提供一份详细的参考资料。我们将全面介绍泛型/JSONJavaScriptSerializerC#的

这篇文章主要围绕泛型/ JSON JavaScriptSerializer C#java泛型展开,旨在为您提供一份详细的参考资料。我们将全面介绍泛型/ JSON JavaScriptSerializer C#的优缺点,解答java泛型的相关问题,同时也会为您带来.Net C# 泛型序列化和反序列化JavaScriptSerializer、ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON、asp.net – 超过了JavaScriptSerializer.MaxJsonLength.处理这个的最佳做法是什么?、C# .net core 使用JsonConvert替代JavaScriptSerializer的实用方法。

本文目录一览:

泛型/ JSON JavaScriptSerializer C#(java泛型)

泛型/ JSON JavaScriptSerializer C#(java泛型)

我正在使用VS2008Express在NET3.5SP1中构建winForms应用程序。我正在尝试使用System.Web.Script.Serialization库反序列化对象。

错误是:数组反序列化不支持类型’jsonWinForm.Category’。

干杯!

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Web;using System.Net;using System.IO;using System.Web.Script.Serialization;namespace jsonWinForm {    public class Category    {        public int categoryid;        public string name;        public int serverimageid;        public DateTime dateuploaded;        public bool enabled;    }    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            using (WebClient client = new WebClient())            {                //manipulate request headers (optional)                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");                string targetUri = "http://www.davemateer.com/ig/genius/category.php";                //execute request and read response as string to console                using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))                {                    string s = reader.ReadToEnd();                    textBox1.Text = s;                    Category cat = new Category();                    JavaScriptSerializer serializer = new JavaScriptSerializer();                    // this fails with a                     //Type ''jsonWinForm.Category'' is not supported for deserialization of an array.                    serializer.Deserialize<Category>(s);                }            }        }    }}

答案1

小编典典

很高兴您发现自己的错误。如果您正在寻找用于JSON序列化的其他工具,则可能需要尝试JSON.Net。

.Net C# 泛型序列化和反序列化JavaScriptSerializer

.Net C# 泛型序列化和反序列化JavaScriptSerializer

项目添加引用System.Web.Extensions

/// <summary>
    /// 泛型序列化
    /// </summary>
    public class JsonHelper
    {
        /// <summary>
        /// JSON序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <returns></returns>
        static public string ScriptSerialize<T>(T t)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            return js.Serialize(t);
        }

        /// <summary>
        /// JSON反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonSring"></param>
        /// <returns></returns>
        static public T ScriptDeserialize<T>(string jsonSring)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            return js.Deserialize<T>(jsonSring);
        }
    }
View Code

 

ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON

ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON

在JavaScriptSerializer中,我们可以看到下面可以使用的方法或者构造函数,它们都是实例方法:

Member Description
JavaScriptSerializer() 构造函数,用于创建一个新的JavaScriptSerializer对象,不指定JavaScriptTypeResolver
JavaScriptSerializer(JavaScriptTypeResolver) 构造函数,用于创建一个新的JavaScriptSerializer对象,并使用指定的JavaScriptTypeResolver来映射特定类型与标识字符串。
ConvertToType<T>(Object) 将给定对象转化成类型T。
Deserialize<T>(String) 将JSON字符串转化为类型T。
DeserializeObject(String) 将JSON字符串转化为一个对象。
MaxJsonLength 获取或者设置序列化时能够接受的JSON字符串的最大长度。
RecursionLimit 获取或者设置在反序列化JSON字符串时递归的最大深度。
RegisterConverters(IEnumerable<JavaScriptConverter>) 注册序列化过程中使用的JavaScriptConveter对象。
Serialize(Object) 将一个对象序列化成JSON字符串。
Serialize(Object, StringBuilder) 将一个对象序列化到一个StringBuilder中。

C#代码:

复制代码
//类
     public class UserInfo
        {
            public Int Id { get; set; }
            public String UserName { get; set; }
            public DateTime Time { get; set; }
        }
        //代码
        public void js()
        {
       //源数据 UserInfo info = new UserInfo(); info.Id = 1; info.UserName = "张三"; info.Time = DateTime.Now;        //初始化 System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();        //序列化,strJson就是josn串 String strJson = jss.Serialize(info);//输出结果:{"Id":1,"UserName":"张三","Time":"\/Date(1297950721668)\/"}
       //方式一:反序列化,转成model UserInfo info2 = jss.Deserialize<UserInfo>(strJson);
       //方式二:JavaScriptObject JavaScriptObject jObject = JavaScriptConvert.DeserializeObject(strJson) as JavaScriptObject; string UserName = jObject["UserName"].ToString(); string Time = jObject["Time"].ToString();//时间格式需要特殊处理 Time = Time.Replace("/Date(","").Replace(")/","");//替换掉/Date(),只保留里面的数字 Time = ConvertJsonDateToDateString(Convert.ToInt64(Time)); //如果josn里还包含josn,那么就需要这么写。 JavaScriptArray JsonData = (JavaScriptArray)jObject["records"]; if (JsonData.Count > 0) { for (int m = 0; m < JsonData.Count; m++) { JavaScriptObject orderObj = (JavaScriptObject)JsonData[m]; } } } /// <summary> /// 将Json序列化的时间由/Date(1503996878)/转为字符串 /// </summary> public string ConvertJsonDateToDateString(long Time) { string result = string.Empty; DateTime dt = new DateTime(1970, 1, 1); dt = dt.AddMilliseconds(Time); dt = dt.ToLocalTime(); result = dt.ToString("yyyy/MM/dd HH:mm:ss"); return result; }

asp.net – 超过了JavaScriptSerializer.MaxJsonLength.处理这个的最佳做法是什么?

asp.net – 超过了JavaScriptSerializer.MaxJsonLength.处理这个的最佳做法是什么?

我使用jQuery的$.ajax()函数发送给客户端的大量数据.我在ASP.NET Web服务中调用返回JSON数据的方法.一切都适用于大多数搜索,但是当我有一个大的数据集返回时,我遇到了一个JavaScriptSerializer MaxJsonLength属性的问题.处理这个的最佳做法是什么?我不想只是任意设置一个最大长度.如果返回的数据大于当前的最大值,还是应该重新写入并向客户端发送数据卡,我可以在Web服务中设置MaxJsonLength吗?

以下是Web服务的相关代码段:

Dictionary<string,object> jsonValuePairs = new Dictionary<string,object>();
//add some data to the dictionary...
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs);

解决方法

从客户端脚本调用的web方法设置最大长度的唯一方法是通过web.config文件(如下).
设置此问题是什么?
我每次都会通过多个xhr调用来处理数据的部分数据.
<system.web.extensions>
  <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="500000">
        </jsonSerialization>
      </webServices>
  </scripting>
</system.web.extensions>

更新:默认大小为2097152,相当于4 MB的Unicode字符串数据.你真的要把这么多的数据发回给客户吗?如果这样,你需要看看应用程序设计,因为用户体验会慢而繁琐.

C# .net core 使用JsonConvert替代JavaScriptSerializer

C# .net core 使用JsonConvert替代JavaScriptSerializer

.net core 中不存在System.Runtime.Serialization.Json与System.Web.Script.Serialization这两个namespace,因此也就不存在JavaScriptSerializer,所以在移植项目时,可以使用Newtonsoft.Json中的JsonConvert来替代。

代码:

//.net framework下
//JavaScriptSerializer serializer = new JavaScriptSerializer();
//var res = serializer.Serialize(YourObject);

//.net core 下使用Newtonsoft.Json
var res = JsonConvert.SerializeObject(YourObject);

今天关于泛型/ JSON JavaScriptSerializer C#java泛型的讲解已经结束,谢谢您的阅读,如果想了解更多关于.Net C# 泛型序列化和反序列化JavaScriptSerializer、ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON、asp.net – 超过了JavaScriptSerializer.MaxJsonLength.处理这个的最佳做法是什么?、C# .net core 使用JsonConvert替代JavaScriptSerializer的相关知识,请在本站搜索。

本文标签: