欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

XML和JSON序列化以及反序列化

程序员文章站 2022-06-28 20:11:39
1.将文件保存序列化至文档中,然后再读取: //首先创建可序列化的实体类 下面是序列化保存文件,以及反序列化读取文件 2.对xml文件序列化和反序列化 公有属性: 3.对JSON进行序列化和反序列化 public string Student(){ public string ID{get;set; ......

1.将文件保存序列化至文档中,然后再读取:

//首先创建可序列化的实体类

[serializable]

public class message
{
public string name { get; set; }
public int age { get; set; }
public datetime time { get; set; }
public char gender { get; set; }
}

 

下面是序列化保存文件,以及反序列化读取文件

插入命名空间:using system.io;
       using system.runtime.serialization.formatters.binary;
1 private void btn_click(object sender,eventargs e){ 2 3 message ms=new message() 4 5 { 6   name=this.txt_name.text.trim().tostring(), 7 8   age=convert.toint32(this.txt_age.text.trim()), 9 10   time=convert.todatetime(this.txt_time.text.trim()), 11 12   gender=convert.tochar(this.txt_gender.text.trim()) 13 }; 14 15 this.writerfile(ms); 17 } 19 private void writefile(object message){ 20   //创建序列化文件 22   filestream fs=new filestream("messagefilename",filemode.create) 24   //创建二进制格式化器 26   binaryformatter bf=new binaryformatter(); 28   //将对象序列化 30   bf.serialize(fs,message); 32   fs.close(); 34 } 38 //反序列化 将文本信息反序列化读取出来 39 40 private void btn_read_click( object sender,eventargs e){ 41   readfile(); 42 } 44 private void readfile(){ 45   //打开序列化文件 47   filestream fs=new filestream("messagename",filemode.open) 49   binaryformatter bf=new binaryformatter(); 51   //将文件反序列化 53   message ms=(message)bf.deserialize(fs); 55   //进行赋值 57   txt_name.text=ms.name.tostring(); 59   fs.close(); 60 }

2.对xml文件序列化和反序列化

公有属性:

public class rspitempicset
    {
       // 操作返回xml示例,按这个xml格式定义可序列化的实体类
        public static string str = @"<rspitempicset>
            <functionid>setitemspics</functionid>
            <time>2017-09-07 15:51:04</time>
            <itemsidlist>
                <itemidinfo>
                    <itemid>43545346</itemid>
                    <opercode>1</opercode>
                    <operation>操作失败</operation>
                </itemidinfo>
                <itemidinfo>
                    <itemid>1125507057</itemid>
                    <opercode>0</opercode>
                    <operation>操作成功</operation>
                </itemidinfo>
            </itemsidlist>
        </rspitempicset>";
                
                public string functionid { get; set; }        
                public string time { get; set; }
                public list<itemidinfo> itemsidlist { get; set; }
                public class itemidinfo
                {
                    public string itemid { get; set; }
                    public string opercode { get; set; }
                    public string operation { get; set; }
                }
    }



//插入命名空间
    using system.io;
    using system.xml.serialization

//对xml文件进行反序列化
    private void btn_read_click(object sender,eventargs e)
{
 //创建序列化对象
       xmkserializer se=new xmlserializer(typeof("类名"))
//将xml格式字符串转为utf8的格式编码
        byte[] arry=encoding.utf8.getbytes("xml格式字符串");
 //指定流的对象
    stream me=new memorystream(arry);
 //将xml字符串反序列化
    rspitempicset rsp=(rspitempicset)se.deserialize(me);
//给文本框赋值
    textbox1.text=resp.itemsidlist[0].itemid;
}
//对xml文件序列化
private void btn_write_click(object sender,eventargs e)
{
//将xml节点类实例化
  rspitempicset rsp=new rspitempicset();
  rep.functionid="一个值";
  list<rspitempicset.itemidinfo> itemidinfos=new list<rspitempicset.itemidinfo>();
  rspitempicset.itemidinfo idi=new rspitempicset();
  idi.operation="一个值";
  idi.opercode="一个值";
  idi.itemid="一个值";
  itemidinfos.add(idi);
  rsp.itemsidlist=itemidinfos;
  //创建流
  memorystream strem=new memorystream();
  //创建序列化对象
  xmlserializer se=new xmlserializer(typeof(rspitempicset));
  //使用流将文件格式化为xml文件,记录到流中
  se.serialize(stream,rsp);
  stream.position=0;
  //从字节流中读取文件
  streamreader sr=new streamreader(stream);
  string str=sr.readtoend();
  sr.dispose();
  stream.dispose();

 3.对json进行序列化和反序列化

//实例化对象并赋值
message mes=new message(){name="张三",age=14,time=convert.toin32("2019-05-16"),gender=convert.tochar("男")};
//json序列化
    
string strdate=jsonconvert.serializeobject(mes);

//json反序列化

public string student()
{
public string id{get;set;}
public string name{get;set;}
}

string str = "{\"id\":2,\"name\":\"鲁智深\",\"age\":230,\"sex\":\"男\"}";

student str=jsonconvert.deserializeobject<student>(str);

结果:str.id=2;