自定义序列化对象c#

自定义序列化对象c#

ID:38526470

大小:29.00 KB

页数:7页

时间:2019-06-14

自定义序列化对象c#_第1页
自定义序列化对象c#_第2页
自定义序列化对象c#_第3页
自定义序列化对象c#_第4页
自定义序列化对象c#_第5页
资源描述:

《自定义序列化对象c#》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、自定义序列化对象很多时候,我们需要将对象序列化成字符串保存到内存、磁盘或者Page.ViewState中。基于种种原因,我们希望序列化结果尽可能小,尽可能简单,即便用其他的方法(比如正则表达式)也能解析出数据。BinaryFormatter的结果转换成字符串(或者Base64)长度太大,而XmlSerializer对数据类型支持有限,显然内置的序列化引擎不足以满足我们的需求,还是自己丰衣足食。下面的代码可能还不完善,仅供参考,内容比较简单,不做详述。///

///序列化///publicstaticstringSerializeObject(obje

2、cto){  charsep1='

3、';  charsep2=',';  charsep3='=';  StringBuildersb=newStringBuilder();  FieldInfo[]fields=o.GetType().GetFields(BindingFlags.Instance

4、BindingFlags.Public

5、    BindingFlags.NonPublic);  foreach(FieldInfofieldinfields)  {    objectvalue=field.GetValue(o);    if(value!=null)    {   

6、   if(field.FieldType.GetInterface("IDictionary")!=null)      {        foreach(objectkeyin(valueasIDictionary).Keys)        {          sb.AppendFormat("{0}{3}{1}{2}",key,(valueasIDictionary)[key],sep2,sep3);        }        if(sb[sb.Length-1]==sep2)sb.Remove(sb.Length-1,1);      }      elseif(fi

7、eld.FieldType.GetInterface("IList")!=null)      {        foreach(objectvin(valueasIList))        {          sb.AppendFormat("{0}{1}",v,sep2);        }        if(sb[sb.Length-1]==sep2)sb.Remove(sb.Length-1,1);      }      elseif(field.FieldType==typeof(Boolean))      {        sb.Append((bool)valu

8、e?"T":"");      }      else      {        sb.Append(value);      }    }    sb.Append(sep1);  }  if(sb[sb.Length-1]==sep1)sb.Remove(sb.Length-1,1);  returnsb.ToString();}///

///反序列化///publicstaticTDeserializeObject(strings)  whereT:new(){  charsep1='

9、';  charsep2=',';  charse

10、p3='=';  To=newT();  FieldInfo[]fields=o.GetType().GetFields(BindingFlags.Instance

11、BindingFlags.Public

12、    BindingFlags.NonPublic);  string[]values=s.Split(sep1);  for(inti=0;i

13、e.GetInterface("IDictionary")!=null)    {      string[]vs=values[i].Split(sep2);      IDictionarydictionary=field.GetValue(o)asIDictionary;      Typekey=field.FieldType.IsGenericType?        field.FieldType.GetGenericArgumen

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。