如何 对 JSON 数据进行序列化和反序列化

               

JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间快速交换少量数据。

本主题演示如何使用 DataContractJsonSerializer 将 .NET 类型对象序列化为 JSON 编码数据,然后将 JSON 格式的数据反序列化回 .NET 类型的实例。 此处的示例使用数据协定来演示用户定义的 Person 类型的序列化和反序列化。

通 常,当在通过支持 AJAX 的终结点公开的服务操作中使用数据协定类型时,Windows Communication Foundation (WCF) 会自动处理 JSON 序列化和反序列化。 但是,在某些情况下您可能需要直接处理 JSON 数据,这正是本主题演示的方案。

注意:如果在服务器上的传出答复的序列化期间发生错误或答复操作由于某种其他原因引发错误,则可能不会将其作为错误返回到客户端。

本主题基于 JSON Serialization示例。

定义 Person 的数据协定

  •    

    通过将 DataContractAttribute 附加到类并将 DataMemberAttribute 属性附加到要序列化的成员,为 Person 定义数据协定。 有关数据协定的更多信息,请参见设计服务协定

       
       
           
       
    [DataContract]
        internal class Person
        {
            [DataMember]
            internal string name;

            [DataMember]
            internal int age;
        }
       
       

将 Person 类型的实例序列化为 JSON

  1.    

    创建 Person 类型的实例。

       
       
           
       
    Person p = new Person();
    p.name = "John";
    p.age = 42;
       
       
  2.    
  3.    

    使用 DataContractJsonSerializerPerson 对象序列化为内存流。

       
       
           
       
    MemoryStream stream1 = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
       
       
  4.    
  5.    

    使用 WriteObject 方法将 JSON 数据写入到流中。

       
       
           
       
    ser.WriteObject(stream1, p);
       
       
  6.    
  7.    

    显示 JSON 输出。

       
       
           
       
    stream1.Position = 0;
    StreamReader sr = new StreamReader(stream1);
    Console.Write("JSON form of Person object: ");
    Console.WriteLine(sr.ReadToEnd());
       
       

从 JSON 反序列化 Person 类型的实例

  1.    

    通过使用 DataContractJsonSerializerReadObject 方法,将 JSON 编码数据反序列化为一个新的 Person 实例:

       
       
           
       
    stream1.Position = 0;
    Person p2 = (Person)ser.ReadObject(stream1);
       
       
  2.    
  3.    

    显示结果。

       
       
           
       
    Console.Write("Deserialized back, got name=");
    Console.Write(p2.name);
    Console.Write(", age=");
    Console.WriteLine(p2.age);
       
       

示例

               
Note注意:
           

对于包含多个具有相同名称的成员的数据协定,JSON 序列化程序将引发一个序列化异常,如以下示例代码中所示。

           
[DataContract]
public class TestDuplicateDataBase
{
    [DataMember]
    public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
    [DataMember]
    public new int field1 = 999;
}
            

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值