热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RJson

这是一篇关于在后台使用C#语言将Json字符串转化为对象集合类的介绍,适用于处理后台接收Json字符串,将Json字符串转Xml或者其他格式的场合。主要

这是一篇关于在后台使用C#语言将Json字符串转化为对象集合类的介绍,适用于处理后台接收Json字符串,将Json字符串转Xml或者其他格式的场合。

主要的思想如下:
JsonProxy
json集合使用List<List<JsonClass>>表示。
json对象使用List<JsonClass>表示。
其中JsonClass表示Json字符串一个一个的Key-Value。
&#61;&#61;》JsonClass(key,value,type,fullstring......)

//Create By YZR
public
class JsonClass{#region 成员//&#61;&#61;&#61;>"name":"YZR"private string fullString;public string FullString{get { return fullString; }set { fullString &#61; value; }}private string key;public string Key{get { return key; }set { key &#61; value; }}private JsonClass[] jcs;private List<object> valueContainer;//json集合形式&#xff0c;存放的可能是json对象&#xff0c;也可能是object类型值public List<object> ValueContainer{get { return valueContainer; }set { valueContainer &#61; value; }}private List> jsonContainer;public List> JsonContainer{get { return jsonContainer; }set { jsonContainer &#61; value; }}public JsonClass[] Jcs{get { return jcs; }set { jcs &#61; value; }}private object value;public object Value{get { return this.value; }set { this.value &#61; value; }}private SubJsonType valueType;public SubJsonType ValueType{get { return valueType; }set { valueType &#61; value; }}#endregion#region 构造函数public JsonClass(){}public JsonClass(string key, object value){this.key &#61; key;this.value &#61; value;this.fullString &#61; key &#43; ":" &#43; value;}public JsonClass(string key, List<object> valueContainer){this.key &#61; key;this.valueContainer &#61; valueContainer;}//集合public JsonClass(string key, JsonClass[] jcs){this.key &#61; key;this.jcs &#61; jcs;}//对象public JsonClass(string str){this.fullString &#61; str;init();}#endregionprivate void init(){JosnProxy jp &#61; new JosnProxy(fullString);jp.init();if (jp.JsonType &#61;&#61; JsonType.Object)//json对象
{List list &#61; jp.JsonList;JsonClass temp &#61; new JsonClass();JsonClass[] jsc &#61; new JsonClass[list.Count];for (int i &#61; 0; i ){jsc[i] &#61; list[i];}this.Jcs &#61; jsc;}else if (jp.JsonType &#61;&#61; JsonType.List)//json集合
{SubJsonType subType &#61; JsonParse.JudgeJsonType(fullString.Substring(1, fullString.Length - 2));//SubJsonType subType &#61; JsonParse.JudgeJsonType(fullString);switch (subType){case SubJsonType.Object:this.valueContainer &#61; jp.valueContainer;break;case SubJsonType.JsonClass:this.jsonContainer &#61; jp.jsonContainer;break;}}}}

 

将json转为对象主要是通过JsonProxy类进行的。

///

/// json代理类 Create By YZR/// public class JosnProxy{//json字符流private char[] jsonArray;//json字符串private string jsonString;public string JsonString{get { return jsonString; }set { jsonString &#61; value; }}//json字符串长度private int jsonLength;public int JsonLength{get { return jsonLength; }set { jsonLength &#61; value; }}public JosnProxy(string _jsonString){this.jsonString &#61; _jsonString;toArray();jsonList &#61; new List();jsonLength &#61; jsonString.Length;}/// /// 得到json字符流/// /// public char[] toArray(){jsonArray &#61; jsonString.ToCharArray();return jsonArray;}/// /// json对象/// private List jsonList;public List JsonList{get { return jsonList; }set { jsonList &#61; value; }}/// /// 初始化/// public void init(){switch (JsonParse.ToJsonCode(jsonArray[0])){case JsonKey.LeftBraces:Begin(JsonType.Object);break;case JsonKey.LeftMiddle:Begin(JsonType.List);break;case JsonKey.Colon:case JsonKey.Comma:case JsonKey.RightBraces:case JsonKey.RightMiddle:break;//不正常的json字符串default:break;//包含其他字符串的不正常字符串
}}public void init(JsonKey JK)//JsonParse.ToJsonCode(jsonArray[0])
{switch (JK){case JsonKey.LeftBraces:Begin(JsonType.Object);break;case JsonKey.LeftMiddle:Begin(JsonType.Object);break;case JsonKey.Colon:case JsonKey.Comma:case JsonKey.RightBraces:case JsonKey.RightMiddle:break;//不正常的json字符串default:break;//包含其他字符串的不正常字符串
}}private void Begin(JsonType _jsonType){this.JsonType &#61; _jsonType;JsonObject jObject &#61; new JsonObject();int i &#61; 1;string jsonClassKey &#61; string.Empty;string jsonClassValue &#61; string.Empty;if (_jsonType &#61;&#61; JsonType.List){#region 处理集合List<string> list &#61; getJsonObject(jsonString);foreach (string item in list){SubJsonType subType &#61; JsonParse.JudgeJsonType(item);//对象if (subType &#61;&#61; SubJsonType.JsonClass){JosnProxy jp &#61; new JosnProxy(item);jp.init();List lc &#61; jp.JsonList;jObject.jsonContainer.Add(lc);}else if (subType &#61;&#61; SubJsonType.Object)//
{jObject.valueContainer.Add(item);}}#endregionjsonContainer &#61; jObject.jsonContainer;//对象集合valueContainer &#61; jObject.valueContainer;//值集合
}else{#region 处理对象DealJsonList(i, ref jObject, jsonClassKey, jsonClassValue);#endregionjsonList &#61; jObject.jsonClassList;//对象//jsonContainer &#61; jObject.jsonContainer;//对象集合//valueContainer &#61; jObject.valueContainer;//值集合
}}private void DealJsonList(int i, ref JsonObject jObject, string jsonClassKey, string jsonClassValue){while (i > 0 && i //处理对象
{if (jsonArray[i] &#61;&#61; &#39;"&#39;){int EndIndex &#61; FingRightBraces(i);//从开始索引为i到结束索引为EndIndex截取字符串&#xff0c;封装为JsonClass对象,保存在JsonObject对象的if (string.IsNullOrEmpty(jsonClassKey)){jsonClassKey &#61; jsonString.Substring(i, EndIndex - i &#43; 1);}else{jsonClassValue &#61; jsonString.Substring(i, EndIndex - i &#43; 1);JsonClass jc &#61; new JsonClass(jsonClassKey, jsonClassValue);jObject.jsonClassList.Add(jc);jsonClassKey &#61; string.Empty;}i &#61; EndIndex &#43; 1;}else if (jsonArray[i] &#61;&#61; &#39;,&#39;){i&#43;&#43;;}else if (jsonArray[i] &#61;&#61; &#39;}&#39;){i &#61; 0;}else if (jsonArray[i] &#61;&#61; &#39;:&#39;){i&#43;&#43;;}else if (jsonArray[i] &#61;&#61; &#39;{&#39;)//对象
{int _right &#61; jsonString.IndexOf(&#39;}&#39;, i);int _left &#61; jsonString.IndexOf(&#39;{&#39;, i);//嵌套if (_right !&#61; -1){jsonClassValue &#61; jsonString.Substring(i, _right - i &#43; 1);}JsonClass subJsonClass &#61; new JsonClass(jsonClassValue);JsonClass jc &#61; new JsonClass(jsonClassKey, subJsonClass.Jcs);jc.ValueType &#61; SubJsonType.JsonClass;jObject.jsonClassList.Add(jc);jsonClassKey &#61; string.Empty;i &#61; _right &#43; 1;}else if (jsonArray[i] &#61;&#61; &#39;[&#39;){int _right &#61; jsonString.IndexOf(&#39;]&#39;, i);int _left &#61; jsonString.IndexOf(&#39;[&#39;, i &#43; 1);SubJsonType subType &#61; SubJsonType.None;if (_left !&#61; -1 && _left <_right)//嵌套
{//int Nesting &#61; FindNestingCount(jsonString, i, _right, &#39;[&#39;);//嵌套数// _right &#61; FindRight(jsonString, _right, &#39;]&#39;, Nesting);_right &#61; SeniorFindIndex(jsonString, i, &#39;[&#39;, &#39;]&#39;);jsonClassValue &#61; jsonString.Substring(i, _right - i &#43; 1);subType &#61; JsonParse.JudgeJsonType(jsonClassValue.Substring(1, jsonClassValue.Length - 2));}else{jsonClassValue &#61; jsonString.Substring(i, _right - i &#43; 1);subType &#61; JsonParse.JudgeJsonType(jsonClassValue.Substring(1, jsonClassValue.Length - 2));}JsonClass subJsonClass &#61; new JsonClass(jsonClassValue);//JsonClass[] jsc &#61; new JsonClass[subJsonClass.Jcs.Length];//jsc[0] &#61; subJsonClass;
JsonClass jc;if (subType &#61;&#61; SubJsonType.Object){//jObject.valueContainer &#61; subJsonClass.ValueContainer;jc &#61; new JsonClass(jsonClassKey, subJsonClass.ValueContainer);jc.ValueType &#61; SubJsonType.JslnContainer;//json集合(值集合)jc.FullString &#61; jsonClassKey &#43; ":" &#43; jsonClassValue;//构造函数没赋值fullString&#xff0c;所以需要在这里补上
jObject.jsonClassList.Add(jc);}else if (subType &#61;&#61; SubJsonType.JsonClass){jc &#61; new JsonClass();jc.Key &#61; jsonClassKey;jc.JsonContainer &#61; subJsonClass.JsonContainer;jc.ValueType &#61; SubJsonType.JslnContainer;jc.FullString &#61; jsonClassKey &#43; ":" &#43; jsonClassValue;jObject.jsonClassList.Add(jc);}else{jc &#61; new JsonClass();}jsonClassKey &#61; string.Empty;i &#61; _right &#43; 1;}else if (jsonArray[i] &#61;&#61; &#39;]&#39;){}else//数值或者布尔值
{int index &#61; jsonString.IndexOf(&#39;,&#39;, i);if (index &#61;&#61; -1){index &#61; jsonString.IndexOf(&#39;}&#39;, i);}jsonClassValue &#61; jsonString.Substring(i, index - i);JsonClass jc &#61; new JsonClass(jsonClassKey, jsonClassValue);jc.ValueType &#61; SubJsonType.Object;jObject.jsonClassList.Add(jc);jsonClassKey &#61; string.Empty;i&#43;&#43;;}}}private int FingRightBraces(int StartIndex){return jsonString.IndexOf(&#39;"&#39;, StartIndex &#43; 1);}/// /// json集合(对象集合)/// public List> jsonContainer;/// /// json集合(值集合)/// public List<object> valueContainer;private JsonType jsonType;public JsonType JsonType{get { return jsonType; }set { jsonType &#61; value; }}public SubJsonType getType(string _str){char[] arr &#61; _str.ToCharArray();switch (JsonParse.ToJsonCode(arr[0])){case JsonKey.LeftBraces:return SubJsonType.JsonClass;case JsonKey.LeftMiddle:return SubJsonType.JslnContainer;case JsonKey.Quote:case JsonKey.None:return SubJsonType.Object;default:return SubJsonType.None;}}/// /// 以单个的json对象字符串加入List中/// /// /// public List<string> getJsonObject(string jsonContainer){jsonContainer &#61; jsonContainer.Trim();char[] arr &#61; jsonContainer.ToCharArray();if (arr[0] !&#61; &#39;[&#39;){return null;}int i &#61; 1;List<string> list &#61; new List<string>();bool StartContact &#61; false;int BeginTemp &#61; 0;while (i > 0 && i < arr.Length){if (arr[i] &#61;&#61; &#39;{&#39;){int _right &#61; jsonContainer.IndexOf(&#39;}&#39;, i);int _left &#61; jsonContainer.IndexOf(&#39;{&#39;, i &#43; 1);if (_left !&#61; -1 && _left <_right)//嵌套
{//int Nesting &#61; FindNestingCount(jsonContainer, i, _right, &#39;{&#39;);//嵌套数//_right &#61; FindRight(jsonContainer, _right, &#39;}&#39;, Nesting);_right &#61; SeniorFindIndex(jsonContainer, i, &#39;{&#39;, &#39;}&#39;);}list.Add(jsonContainer.Substring(i, _right - i &#43; 1));i &#61; _right &#43; 1;}else if (arr[i] &#61;&#61; &#39;,&#39;){if (StartContact){list.Add(jsonContainer.Substring(BeginTemp, i - BeginTemp));StartContact &#61; false;}i&#43;&#43;;}else if (arr[i] &#61;&#61; &#39;]&#39;){//结束if (StartContact){list.Add(jsonContainer.Substring(BeginTemp, i - BeginTemp));StartContact &#61; false;}i&#43;&#43;;}else if (arr[i] &#61;&#61; &#39;"&#39;)//Object之字符串类型 Object之数值字符串或者布尔类型字符串
{if (!StartContact){StartContact &#61; true;BeginTemp &#61; i;}else{list.Add(jsonContainer.Substring(BeginTemp &#43; 1, i - BeginTemp - 1));StartContact &#61; false;}i&#43;&#43;;}else{//list.Add(arr[i].ToString());if (!StartContact){StartContact &#61; true;BeginTemp &#61; i;}//else//{// list.Add(jsonContainer.Substring(BeginTemp &#43; 1, i - BeginTemp - 1));// StartContact &#61; false;//}i&#43;&#43;;}}return list;}public int SeniorFindIndex(string jsonString, int BeginIndex, char left_word, char right_word){string subStr &#61; string.Empty;subStr &#61; jsonString.Substring(BeginIndex &#43; 1, jsonString.Length - BeginIndex - 1);List<int> LeftList &#61; new List<int>();List<int> RightList &#61; new List<int>();int _left &#61; 0;int _rigth &#61; 0;while (_left !&#61; -1 && _rigth !&#61; -1){_left &#61; subStr.IndexOf(left_word, _left);if (_left !&#61; -1){LeftList.Add(_left);_left&#43;&#43;;}_rigth &#61; subStr.IndexOf(right_word, _rigth);if (_rigth !&#61; -1){RightList.Add(_rigth);_rigth&#43;&#43;;}}int k &#61; 0;bool run &#61; true;while (RightList[k] > LeftList[k] && run){if (LeftList.Count &#61;&#61; k &#43; 1){run &#61; false;}else{k&#43;&#43;;}}return run &#61;&#61; true ? RightList[k] &#43; BeginIndex &#43; 1 : RightList[k &#43; 1] &#43; BeginIndex &#43; 1;}/// /// 单层嵌套/// /// /// /// /// /// public int FindIndex(string jsonString, int BeginIndex, char left_word, char right_word){//[ [] [] .....( ] 找到这里的索引)string subStr &#61; string.Empty;subStr &#61; jsonString.Substring(BeginIndex &#43; 1, jsonString.Length - BeginIndex - 1);char[] arr &#61; jsonString.ToCharArray();int _left &#61; 0;int _rigth &#61; 0;while (_left !&#61; -1){_left &#61; subStr.IndexOf(left_word, _left);if (_left !&#61; -1){_left&#43;&#43;;}_rigth &#61; subStr.IndexOf(right_word, _rigth);_rigth&#43;&#43;;}char temp &#61; arr[_rigth &#43; BeginIndex];return _rigth &#43; BeginIndex;}public int FindNestingCount(string jsonString, int BeginIndex, int LastIndex, char word){string subStr &#61; jsonString.Substring(BeginIndex &#43; 1, LastIndex - BeginIndex &#43; 1);int Appear &#61; GetStrCount(subStr, word);//出现次数return Appear;}public int FindRight(string jsonString, int BeginIndex, char Word, int Pass){int count &#61; 0;int StartIndex &#61; BeginIndex;while (count <&#61; Pass){StartIndex &#61; jsonString.IndexOf(Word, StartIndex);StartIndex&#43;&#43;;count&#43;&#43;;}return StartIndex - 1;}/// /// 获得字符在字符串中出现的次数/// /// /// /// public int GetStrCount(string str, char Word){int count &#61; 0;char[] arr &#61; str.ToCharArray();for (int i &#61; 0; i ){if (arr[i] &#61;&#61; Word){count&#43;&#43;;}}return count;}}
View Code

 

注意&#xff1a;这里并没有加上异常处理&#xff0c;所以使用之前需要先确认json是否是一个符合规范并且正确格式的json字符串。

RJson的几个辅助类&#xff1a;

internal class JsonObject{public List jsonClassList &#61; new List();//对象public List> jsonContainer &#61; new List>();//对象集合public List<object> valueContainer &#61; new List<object>();//值集合
}public enum SubJsonType{Object,//JsonClass,//对象JslnContainer,//集合
None}public enum JsonType{Object,//对象List,//集合
None}
public enum JsonKey{LeftMiddle,//左中括号 [
RightMiddle,//右中括号 ]
LeftBraces,//左大括号 {
RightBraces,//右大括号 }
Comma,//逗号
Colon,//冒号
Quote,//双引号
None}public class JsonParse{///

/// 判断子对象的json对象/// /// /// public static SubJsonType JudgeJsonType(string SubString){char[] arr &#61; SubString.ToCharArray();if (SubString.IndexOf(&#39;{&#39;) &#61;&#61; -1 && SubString.IndexOf(&#39;[&#39;) &#61;&#61; -1){return SubJsonType.Object;//数值
}else if (arr[0] &#61;&#61; &#39;[&#39;){return SubJsonType.JslnContainer;}else if (arr[0] &#61;&#61; &#39;{&#39;){return SubJsonType.JsonClass;}else return SubJsonType.None;}/// /// JsonCode&#61;>String/// /// /// public static string ToJsonString(JsonKey JsonCode){if (JsonCode &#61;&#61; null){return "";}switch (JsonCode){case JsonKey.LeftMiddle:return "[";case JsonKey.RightMiddle:return "]";case JsonKey.LeftBraces:return "{";case JsonKey.RightBraces:return "}";case JsonKey.Comma:return ",";case JsonKey.Colon:return ":";default:return "";}}/// /// String&#61;>JsonKey/// /// /// public static JsonKey ToJsonCode(string jsonString){if (string.IsNullOrEmpty(jsonString)){return JsonKey.None;}switch (jsonString){case "[":return JsonKey.LeftMiddle;case "]":return JsonKey.RightMiddle;case "{":return JsonKey.LeftBraces;case "}":return JsonKey.RightBraces;case ",":return JsonKey.Comma;case ":":return JsonKey.Colon;case "\"":return JsonKey.Quote;default:return JsonKey.None;}}/// /// char&#61;>JsonKey/// /// /// public static JsonKey ToJsonCode(char jsonString){if (jsonString &#61;&#61; null){return JsonKey.None;}switch (jsonString){case &#39;[&#39;:return JsonKey.LeftMiddle;case &#39;]&#39;:return JsonKey.RightMiddle;case &#39;{&#39;:return JsonKey.LeftBraces;case &#39;}&#39;:return JsonKey.RightBraces;case &#39;,&#39;:return JsonKey.Comma;case &#39;:&#39;:return JsonKey.Colon;case &#39;"&#39;:return JsonKey.Quote;default:return JsonKey.None;}}}

 

最后展示一下Demo&#xff1a;

RJson 1.0版本问题&#xff1a;1.josn字符串本身包含七个关键词需要处理2.json字符串的异常处理3.json字符串的验证//测试代码如下&#xff1a;static void Main(string[] args){//JsonHelper.JosnString &#61; "{\"number\":2,\"who\":\"YZR\",\"GrilFirend\":{\"Name\":\"LYF\",\"number\":3},\"Firend\":{\"Name\":\"Dog\",\"number\":4,\"Age\":1}}";//JsonHelper.JosnString &#61; "[{\"Name\":\"YZR\",\"number\":1,\"Firend\":{\"Name\":\"Dog\",\"number\":4,\"Age\":1}},{\"Name\":\"LYF\",\"number\":2,\"Firend\":{\"Name\":\"Dog\",\"number\":4,\"Age\":1,\"Type\":{\"Sex\":\"Man\",\"City\":\"GZ\"}}},{\"Name\":\"Dog\",\"number\":3}]";//JsonHelper.JosnString &#61; "{\"number\":2,\"who\":[\"YZR\",\"LYF\"],\"Firend\":[{\"Name\":\"Dog\",\"number\":4,\"Age\":1},{\"Name\":\"Dog\",\"number\":4,\"Age\":1}]}";//JsonHelper.JosnString &#61; "{\"number\":2,\"Firend\":[{\"Name\":\"YZR\",\"Color\":[\"1\",\"2\"]},{\"Name\":\"LYF\",\"Color\":[\"3\",\"4\"]}]}";JsonHelper.JosnString &#61; "{\"number\":2,\"Firend\":[{\"Name\":\"YZR\",\"Color\":[1,2]},{\"Name\":\"LYF\",\"Color\":[3,4]}]}";//JsonHelper.JosnString &#61; "[{\"number\":2,\"Firend\":[{\"Name\":\"YZR\",\"Color\":[1,2]},{\"Name\":\"LYF\",\"Color\":[3,4]}]},{\"number\":1}]";//JsonHelper.JosnString &#61; "[{\"number\":2,\"Firend\":[{\"Name\":\"YZR\",\"Color\":[1,2]},{\"Name\":\"LYF\",\"Color\":[3,4]},{\"number\":1}]}]";int len &#61; JsonHelper.JosnString.Length;Console.WriteLine("整个长度为:" &#43; len &#43; ",第二个字符是:" &#43; JsonHelper.JosnString[1]);JosnProxy jp &#61; new JosnProxy(JsonHelper.JosnString);jp.init();if (jp.JsonType &#61;&#61; JsonType.Object)//json对象
{List jsonClasslist &#61; jp.JsonList;#region 业务处理foreach (JsonClass item in jsonClasslist){switch (item.ValueType){case SubJsonType.Object:DealObject();break;case SubJsonType.JsonClass:DealJsonClass(item);break;default:break;}} #endregion}else//json集合(对象集合)
{List> list &#61; jp.jsonContainer;//json集合#region 业务处理#endregion}}static void DealObject(){//Do Some Tings
}static void DealJsonClass(JsonClass jc){//Do Some Tingsstring jsonString &#61; jc.FullString;}

 

转:https://www.cnblogs.com/Francis-YZR/p/5385941.html



推荐阅读
  • domain.js代码如下 ... [详细]
  • 在实际开发中,现在安卓端和后台之间的数据交互,一般都是用JSON来传递数据信息。JSON大家一般都比较熟悉。我这边就以实际项目中的后台传过来的情况和大家分析下及如何处理。比如后台返 ... [详细]
  • JNI技术实践小结转自http:sett ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 简单动态字符串redis里面很多地方都用到了字符串,我们知道redis是一个键值对存储的非关系型数据库,那么所有的key都是用字符串存储的,还有字符串类型,这些都是用字符串存储的 ... [详细]
  • IOSUITableView解析(一)
    UITableView的作用由于Iphone的大小有限,所以UITableView的作用是巨大的。比如QQ,微博等应用都用到了该控件。UITableVi ... [详细]
  • 一、在androidStudio中实现tabs比较简单,新建项目就可以选择tabs模板进行创建,默认实现tabs功能:直接运行项目就可以看到效果:可以说非常简单,但是我们在实际开发 ... [详细]
  • Echarts 3D地图图表
    需求:实现如图所示的3D地图图表(1)原本使用的highcharts没有3d地图的功能,搜索插件也没有可替代的方案ÿ ... [详细]
  • 接上文http:blog.itpub.net29254281viewspace-1318239领导让开发同学鼓捣一个可配置化的后台.又回到了原来的问题如果要灵活,很多参数要 ... [详细]
  • 1、为什么要对nginx平滑升级随着nginx越来越流行,并且nginx的优势也越来越明显,nginx的版本迭代也来时加速模式,1.9. ... [详细]
  • 1.1.1. Ifacrashhappensthisconfigurationdoesnotguaranteethattherelayloginfowillbeconsistent ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
author-avatar
lj劲-Ybw_582
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有