当前位置:首页>开发>正文

javascriptserializer碰到数组怎么办 使用C# json 二维数组 反序列化

2023-04-14 13:45:08 互联网 未知 开发

 javascriptserializer碰到数组怎么办 使用C# json 二维数组 反序列化

javascriptserializer碰到数组怎么办

JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据。您无法访问序列化程序的此实例。但是,此类公开了公共 API。因此,当您希望在托管代码中使用 JavaScript 对象符号 (JSON) 时可以使用此类。

若要序列化对象,请使用 Serialize 方法。若要反序列化 JSON 字符串,请使用 Deserialize 或 DeserializeObject 方法。若要序列化和反序列化 JavaScriptSerializer 本身不支持的类型,请使用 JavaScriptConverter 类来实现自定义转换器。然后,使用 RegisterConverters 方法注册转换器。
托管类型和 JSON 之间的映射

下表显示序列化进程中托管类型和 JSON 之间的映射。JavaScriptSerializer 本身支持这些托管类型。将 JSON 字符串反序列化为托管类型时,采用相同的映射。但是,反序列化可能是非对称的,并非所有可序列化的托管类型都可以从 JSON 反序列化得到。

二、

通过JavaScriptSerializer来实现。它的名字空间为:System.Web.Script.Serialization

如果要使用它,还须添加

System.Web.Extensions库文件引用

参考实体类:Customer

public class Customer

{

public int Unid { get set }

public string CustomerName { get set }

}

类JavaScriptSerializer描述:为启用 AFAX 的应用程序提供序列化和反序列化功能。

(一) 序列化

方法:public string Serialize(Object obj),用于将对象转换为 JSON 字符串

public string ScriptSerialize(Customer customer)

{

JavaScriptSerializer js = new JavaScriptSerializer()

return js.Serialize(customer)

}

测试:

Customer cc = new Customer { Unid = 1, CustomerName = "John" }

string strJson = ScriptSerialize(cc)

Console.WriteLine(strJson)

(二)反序列化

public Customer ScriptDeserialize(string strJson)

{

JavaScriptSerializer js = new JavaScriptSerializer()

return js.Deserialize(strJson)

}

通过Deserialize方法来实现。

测试:

Customer c1 = ScriptDeserialize(strJson)

Console.WriteLine(c1.Unid " " c1.Custome

使用C# json 二维数组 反序列化

 int[][] arr = newint[2][]
            arr[0] = newint[] { 1, 2, 3, 4 }
            arr[1] = newint[] { 11, 22, 33, 44 }
            System.Web.Script.Serialization.JavaScriptSerializer jsSeria = newSystem.Web.Script.Serialization.JavaScriptSerializer()
            strings = jsSeria.Serialize(arr)  //序列化          
            int[][] arr2 = jsSeria.Deserialize(s, typeof(int[][])) asint[][]//反序列化

golang 切片 数组 怎么区分


数组 Arrays

数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的入参传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。

初始化

数组的初始化有多种形式,查看示例代码 , 在线运行示例代码

[5] int {1,2,3,4,5}
长度为5的数组,其元素值依次为:1,2,3,4,[5] int {1,2}
长度为5的数组,其元素值依次为:1,2,0,0,0 。在初始化时没有指定初值的元素将会赋值为其元素类型int的默认值0,string的默认值是""
[...] int {1,2,3,4,5}
长度为5的数组,其长度是根据初始化时指定的元素个数决定的
[5] int { 2:1,3:2,4:3}
长度为5的数组,key:value,其元素值依次为:0,0,1,2,3。在初始化时指定了2,3,4索引中对应的值:1,2,[...] int {2:1,4:3}
长度为5的数组,起元素值依次为:0,0,1,0,3。由于指定了最大索引4对应的值3,根据初始化的元素个数确定其长度为5

c# 数组反序列化问题

我试了半天终于找到问题了,下面这个串就能成功了:
"[ ["/img\\yangban\\a\\fec9f4058e00881f_a.jpg","1"],["/img\\yangban\\a\\fec9f4058e00881f_a.jpg","1"] ]"
斜杠对josn对象本身也会把它作为转意符来看待的,所以如果你测试返序列一个字符串常量的话就要4个斜杠了,先由c#转换为两个斜杠愿意字符,然后再由josn转换为一个斜杠愿意字符。

最新文章