首页 文章 精选 留言 我的

精选列表

搜索[c/c ],共10000篇文章
优秀的个人博客,低调大师

C#--对象转Json序列化

前言 最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net的平台开发服务,传递Json格式的数据。那么先来介绍一些什么是JSON。 JSON Json(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JS的一个子集。 Json采用完全独立于语言的文本格式。这使得Json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。 Json简单来说就是JS中的对象和数组,所以Json也存在两种结构:对象、数组。 Json对象:Json对象定义在花括号“{}”内,以Key:value键值对的形式存放数据,多个数据使用分号“;”分割。 Json数组:Json数组定义在方括号“[]”内,以字符串的形式存放数据,多个数据使用分号“;”分割。 Json序列化与反序列化 对于.Net而言,从3.5之后就提供了DataContractJsonSerializer类,需要引用DLL,System.Runtime.Serialization。使用方式很简单,需要知道待转换的对象的类型,然后通过MemoryStream流写入的方式转换。对于DataContractJsonSerializer对象而言,序列化和反序列化只需要了解两个方法即可,这两个方法都具有多放重载,适用于不同的环境,这两个方法是: WriteObject:将指定对象序列化为Json数据,并将生成的 Json写入流中。 ReadObject:以 Json格式读取文档流,并返回反序列化的对象。 使用DataContractJsonSerializer序列化对象和反序列化Json都比较简单,下面给出示例代码: 1 private static string getJsonByObject(Object obj) 2 { 3 //实例化DataContractJsonSerializer对象,需要待序列化的对象类型 4 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); 5 //实例化一个内存流,用于存放序列化后的数据 6 MemoryStream stream = new MemoryStream(); 7 //使用WriteObject序列化对象 8 serializer.WriteObject(stream, obj); 9 //写入内存流中 10 byte[] dataBytes = new byte[stream.Length]; 11 stream.Position = 0; 12 stream.Read(dataBytes, 0, (int)stream.Length); 13 //通过UTF8格式转换为字符串 14 return Encoding.UTF8.GetString(dataBytes); 15 } 16 17 private static Object getObjectByJson(string jsonString, Object obj) 18 { 19 //实例化DataContractJsonSerializer对象,需要待序列化的对象类型 20 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); 21 //把Json传入内存流中保存 22 MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); 23 // 使用ReadObject方法反序列化成对象 24 return serializer.ReadObject(stream); 25 } 通过这个转换类,可以对对象进行序列化成Json和反序列化成对象。但是存在一个问题,就是对于集合类型的数据,可以序列化成Json,但是把这个Json反序列化则会失败,我在这里也没有找到更好的办法反序列化集合类型的数据。现在就一些常见.Net类型的数据进行序列化展示。 新建一个获取数据的类JsonObject,在其中分别返回一个Person(id,name,age)对象、List<Person>对象、List<string>对象,List<Dictionary<string, object>>对象,分别看看序列化后的数据。 JsonObject类: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace WebDemo.Json 7 { 8 static public class JsonObject 9 { 10 static public Person getPerson() 11 { 12 Person person = new Person(); 13 person.id = 20; 14 person.name = "slive"; 15 person.age = 24; 16 return person; 17 } 18 static public List<Person> getPersonList() 19 { 20 List<Person> personList = new List<Person>(); 21 Person person = new Person(); 22 person.id = 20; 23 person.name = "slive"; 24 person.age = 24; 25 Person person2 = new Person(); 26 person2.id = 30; 27 person2.name = "jack"; 28 person2.age = 34; 29 Person person3 = new Person(); 30 person3.id = 40; 31 person3.name = "damon"; 32 person3.age = 54; 33 personList.Add(person); 34 personList.Add(person2); 35 personList.Add(person3); 36 return personList; 37 } 38 static public List<string> getStringList() 39 { 40 List<string> stringlist = new List<string>(); 41 stringlist.Add("jack"); 42 stringlist.Add("dick"); 43 stringlist.Add("sean"); 44 return stringlist; 45 } 46 static public List<Dictionary<string,object>> getDicList() 47 { 48 List<Dictionary<string, object>> dicList = new List<Dictionary<string, object>>(); 49 Dictionary<string, object> dic1 = new Dictionary<string, object>(); 50 dic1.Add("id", 17); 51 dic1.Add("name", "jerry"); 52 dic1.Add("age", 24); 53 Dictionary<string, object> dic2 = new Dictionary<string, object>(); 54 dic2.Add("id", 18); 55 dic2.Add("name", "meimei"); 56 dic2.Add("age", 23); 57 Dictionary<string, object> dic3 = new Dictionary<string, object>(); 58 dic3.Add("id", 19); 59 dic3.Add("name", "damon"); 60 dic3.Add("age", 28); 61 dicList.Add(dic1); 62 dicList.Add(dic2); 63 dicList.Add(dic3); 64 return dicList; 65 } 66 } 67 } 分别对JsonObject返回的数据进行序列化,可以看到结果: getPerson():{"age":24,"id":20,"name":"slive"} getPersonList():[{"age":24,"id":20,"name":"slive"},{"age":34,"id":30,"name":"jack"},{"age":54,"id":40,"name":"damon"}] getStringList():["jack","dick","sean"] getDicList():[[{"Key":"id","Value":17},{"Key":"name","Value":"jerry"},{"Key":"age","Value":24}],[{"Key":"id","Value":18},{"Key":"name","Value":"meimei"},{"Key":"age","Value":23}],[{"Key":"id","Value":19},{"Key":"name","Value":"damon"},{"Key":"age","Value":28}]] 总结 最近一直在研究Android开发,所以涉及到Json的解析问题,才会想着找找对于Json对象的序列化的实现。Json作为一个独立于语言的文本,使用什么语言并不重要,这里只是需要把数据对象序列化为Json,传递给Android客户端做准备,虽然这种方式对于集合的反序列化存在问题,但是不影响序列化与数据传递。 本文转自承香墨影博客园博客,原文链接:http://www.cnblogs.com/plokmju/p/ObjectByJson.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Objective-C 处理动态类型的方法

方法 问题或行为 -(BOOL) isKindOfClass : class-object 对象是不是class-object或其子类的成员 -(BOOL) isMemberOfClass:class-object 对象是不是class-object的成员 -(BOOL) respondsToSelector:Selector 对象是否能够响应selector所指定的方法 -(BOOL) instancesRespondToSelector 指定的类实例是否能响应selector -(BOOL) isSubclassOfClass:class-object 对象是否是指定类的子类 -(id) performSelector:selector 应用selector指定的方法 -(id) performSelector:selector withObject:object 应用selector指定的方法 -(id) performSelector:selector withObject:object1 withObject : object2 应用selector指定的方法 测试实验设计 继承关系图: Rectangle.h Square.h 在main.h中的测试如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 // //main.m //Square // //CreatedbyAppleon2017/9/9. //Copyright2017年Apple.Allrightsreserved. // #import<Foundation/Foundation.h> #import"Square.h" int main( int argc, const char *argv[]){ @autoreleasepool{ Square*mySquare=[[Squarealloc]init]; //isMemberof if ([mySquareisMemberOfClass:[Square class ]]==YES) { NSLog(@ "mySquareisamemberofSquareclass" ); // } if ([mySquareisMemberOfClass:[Rectangle class ]]==YES) { NSLog(@ "mySquareissmemberofRectamgleclass" ); } if ([mySquareisMemberOfClass:[NSObject class ]]==YES) { NSLog(@ "mySquareisamemberofNSObjectclass" ); } //isKindOf if ([mySquareisKindOfClass:[Square class ]]==YES) { NSLog(@ "mySquareisakindofSquareclass" ); // } if ([mySquareisKindOfClass:[Rectangle class ]]==YES) { NSLog(@ "mySquareisskindofRectamgleclass" ); } if ([mySquareisKindOfClass:[NSObject class ]]==YES) { NSLog(@ "mySquareisakindofNSObjectclass" ); // } //respondsTo: if ([mySquarerespondsToSelector:@selector(setSide:)]==YES) { NSLog(@ "mySquarerespondstosetSide:method" ); } if ([mySquarerespondsToSelector:@selector(setWidth:addHeight:)]==YES) { NSLog(@ "mySquarerespondstosetWidth:addHeight:method" ); } if ([SquarerespondsToSelector:@selector(alloc)]==YES) { NSLog(@ "Squareclassrespondstoallocmethod" ); } //instancesRespondTo: if ([RectangleinstancesRespondToSelector:@selector(setSide:)]==YES) { NSLog(@ "InstancesofrespondtosetSide:method" ); } if ([SquareinstancesRespondToSelector:@selector(setWidth:addHeight:)]==YES) { NSLog(@ "InstancesofSquarerespondtosetWidth:addHeight::method" ); } if ([SquareisSubclassOfClass:[Rectangle class ]]==YES) { NSLog(@ "Squareisasubclassofarectangle" ); } return 0; } } 本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/1963970,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册