zoukankan      html  css  js  c++  java
  • json 常用的序列化 反序列化对象 代码

    序列化对象:

    ----------------------------------------------------------

    Person p = new Person()
    {
    Name = "Hexiang",
    Birthday = DateTime.Parse("2017-02-20 14:30:00"),
    Gender = "男",
    Love = "Ball"
    };
    string strJson = JsonConvert.SerializeObject(p, Formatting.Indented);

    ------------------------------------------------------

    序列化字典

    Dictionary<string, int> dicPoints = new Dictionary<string, int>(){
    { "James", 9001 },
    { "Jo", 3474 },
    { "Jess", 11926 }
    };

    string strJson = JsonConvert.SerializeObject(dicPoints, Formatting.Indented);

    ------------------------------------

    序列化list

    List<string> lstGames = new List<string>()
    {
    "Starcraft",
    "Halo",
    "Legend of Zelda"
    };

    string strJson = JsonConvert.SerializeObject(lstGames);

    -----------------------------------

    序列化到json文件中

    Person p = new Person()
    {
    Name = "Hexiang",
    Birthday = DateTime.Parse("2017-02-20 14:30:00"),
    Gender = "男",
    Love = "Ball"
    };
    using (StreamWriter file = File.CreateText(@"d:person.json"))
    {
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, p);
    }

    --------------------------------

    序列化 枚举

    List<StringComparison> stringComparisons = new List<StringComparison>
    {
    StringComparison.CurrentCulture,
    StringComparison.Ordinal
    };

    string jsonWithoutConverter = JsonConvert.SerializeObject(stringComparisons);

    this.txtJson.Text = jsonWithoutConverter;//序列化出来是枚举所代表的整数值


    string jsonWithConverter = JsonConvert.SerializeObject(stringComparisons, new StringEnumConverter());
    this.txtJson.Text += " ";
    this.txtJson.Text += jsonWithConverter;//序列化出来是枚举所代表的文本值
    // ["CurrentCulture","Ordinal"]

    List<StringComparison> newStringComparsions = JsonConvert.DeserializeObject<List<StringComparison>>(
    jsonWithConverter,
    new StringEnumConverter());

    -------------------------------------

    序列化dataset

    string json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);

    -------------------------------

    序列化jrow

    JavaScriptSettings settings = new JavaScriptSettings
    {
    OnLoadFunction = new JRaw("OnLoad"),
    OnUnloadFunction = new JRaw("function(e) { alert(e); }")
    };

    string json = JsonConvert.SerializeObject(settings, Formatting.Indented);

    -----------------------

    反序列化list

    string json = @"['Starcraft','Halo','Legend of Zelda']";
    List<string> videogames = JsonConvert.DeserializeObject<List<string>>(json);
    this.txtJson.Text = string.Join(", ", videogames.ToArray());

    ---------------------------------

    反序列化字典

    string json = @"{
    'href': '/account/login.aspx',
    'target': '_blank'
    }";

    Dictionary<string, string> dicAttributes = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

    this.txtJson.Text = dicAttributes["href"];
    this.txtJson.Text += " ";
    this.txtJson.Text += dicAttributes["target"];

    --------------------------------

    反序列化匿名类

    var definition = new { Name = "" };

    string json1 = @"{'Name':'James'}";
    var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);
    this.txtJson.Text = customer1.Name;
    this.txtJson.Text += " ";

    string json2 = @"{'Name':'Mike'}";
    var customer2 = JsonConvert.DeserializeAnonymousType(json2, definition);
    this.txtJson.Text += customer2.Name;

    --------------------------------------------

    反序列化dataset

    string json = @"{
    'Table1': [
    {
    'id': 0,
    'item': 'item 0'
    },
    {
    'id': 1,
    'item': 'item 1'
    }
    ]
    }";

    DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);

    -----------------------------------------

    从文件中反序列化对象

    using (StreamReader file = File.OpenText(@"d:person.json"))
    {
    JsonSerializer serializer = new JsonSerializer();
    Person p = (Person)serializer.Deserialize(file, typeof(Person));
    this.txtJson.Text = p.Name;
    }

    ----------------------------------------------------

    反序列化有构造函数的对象

    string json = @"{'Url':'http://www.google.com'}";

    //直接序列化会报错,需要设置JsonSerializerSettings中ConstructorHandling才可以。
    Website website = JsonConvert.DeserializeObject<Website>(json, new JsonSerializerSettings
    {
    ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
    });

    this.txtJson.Text = website.Url;

    ------------------------------------------

    反序列化对象,如果有构造函数中,创建对象,则用Json的进行替换

    //
    string json = @"{
    'Name': 'James',
    'Offices': [
    'Auckland',
    'Wellington',
    'Christchurch'
    ]
    }";

    UserViewModel model1 = JsonConvert.DeserializeObject<UserViewModel>(json);

    this.txtJson.Text = string.Join(",", model1.Offices);//默认会重复
    this.txtJson.Text += " ";

    //每次从Json中创建新的对象
    UserViewModel model2 = JsonConvert.DeserializeObject<UserViewModel>(json, new JsonSerializerSettings
    {
    ObjectCreationHandling = ObjectCreationHandling.Replace
    });

    this.txtJson.Text = string.Join(",", model2.Offices);

    --------------------------------------

    序列化对象的时候去掉没有赋值 的属性

    Person person = new Person();

    string jsonIncludeDefaultValues = JsonConvert.SerializeObject(person, Formatting.Indented);

    this.txtJson.Text=(jsonIncludeDefaultValues);//默认的序列化,带不赋值的属性

    this.txtJson.Text += " ";

    string jsonIgnoreDefaultValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
    {
    DefaultValueHandling = DefaultValueHandling.Ignore //去掉不赋值的属性
    });

    this.txtJson.Text+=(jsonIgnoreDefaultValues);

    -----------------------------------------------------------------------

    反序列化类中没有对应对属性 处理方法

    string json = @"{
    'FullName': 'Dan Deleted',
    'Deleted': true,
    'DeletedDate': '2013-01-20T00:00:00'
    }";

    try
    {
    JsonConvert.DeserializeObject<Account>(json, new JsonSerializerSettings
    {
    MissingMemberHandling = MissingMemberHandling.Error //要么忽略,要么报错
    });
    }
    catch (JsonSerializationException ex)
    {
    this.txtJson.Text=(ex.Message);
    // Could not find member 'DeletedDate' on object of type 'Account'. Path 'DeletedDate', line 4, position 23.
    }

    ---------------------------------------------------------

    去掉null值的序列化对象

    Person person = new Person
    {
    Name = "Nigal Newborn"
    };

    //默认的序列化
    string jsonIncludeNullValues = JsonConvert.SerializeObject(person, Formatting.Indented);

    this.txtJson.Text=(jsonIncludeNullValues);
    this.txtJson.Text += " ";

    //去掉Null值的序列化
    string jsonIgnoreNullValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
    {
    NullValueHandling = NullValueHandling.Ignore //可以忽略,可以包含
    });

    this.txtJson.Text+=(jsonIgnoreNullValues);

    -----------------------------

    序列化的时候日期的格式化

    DateTime mayanEndOfTheWorld = new DateTime(2012, 12, 21);

    string jsonIsoDate = JsonConvert.SerializeObject(mayanEndOfTheWorld);

    this.txtJson.Text = (jsonIsoDate);

    this.txtJson.Text += " ";
    string jsonMsDate = JsonConvert.SerializeObject(mayanEndOfTheWorld, new JsonSerializerSettings
    {
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
    });

    this.txtJson.Text += (jsonMsDate);
    // "/Date(1356044400000+0100)/"
    this.txtJson.Text += " ";
    string json = JsonConvert.SerializeObject(mayanEndOfTheWorld, new JsonSerializerSettings
    {
    DateFormatString = "yyyy-MM-dd",
    Formatting = Formatting.Indented
    });
    this.txtJson.Text += json;

    ----------------------------

    序列化设置时区

    Flight flight = new Flight
    {
    Destination = "Dubai",
    DepartureDate = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Unspecified),
    DepartureDateUtc = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Utc),
    DepartureDateLocal = new DateTime(2013, 1, 21, 0, 0, 0, DateTimeKind.Local),
    Duration = TimeSpan.FromHours(5.5)
    };

    string jsonWithRoundtripTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
    {
    DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
    });

    this.txtJson.Text=(jsonWithRoundtripTimeZone);
    this.txtJson.Text += " ";
    string jsonWithLocalTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
    {
    DateTimeZoneHandling = DateTimeZoneHandling.Local
    });

    this.txtJson.Text+=(jsonWithLocalTimeZone);
    this.txtJson.Text += " ";

    string jsonWithUtcTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
    {
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
    });

    this.txtJson.Text += (jsonWithUtcTimeZone);
    this.txtJson.Text += " ";

    string jsonWithUnspecifiedTimeZone = JsonConvert.SerializeObject(flight, Formatting.Indented, new JsonSerializerSettings
    {
    DateTimeZoneHandling = DateTimeZoneHandling.Unspecified
    });

    this.txtJson.Text += (jsonWithUnspecifiedTimeZone);

    ---------------------------------------

    序列化默认设置

    // settings will automatically be used by JsonConvert.SerializeObject/DeserializeObject
    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
    Formatting = Formatting.Indented,
    ContractResolver = new CamelCasePropertyNamesContractResolver()
    };

    Person s = new Person()
    {
    Name = "Eric",
    Birthday = new DateTime(1980, 4, 20, 0, 0, 0, DateTimeKind.Utc),
    Gender = "男",
    Love = "Web Dude"
    };

    string json = JsonConvert.SerializeObject(s);
    this.txtJson.Text = json;

    -----------------------------------------

    序列化ImmutableList

    //ImmutableList<string> l = ImmutableList.CreateRange(new List<string>
    // {
    // "One",
    // "II",
    // "3"
    // });

    //string json = JsonConvert.SerializeObject(l, Formatting.Indented);

    -------------------------------------------------

    ----------------------------------------

  • 相关阅读:
    函数的内置方法
    函数
    文件操作
    三元运算
    流程控制
    集合
    div容器内文本对齐--神奇的css
    Struts2的零配置和rest插件
    MIME类型
    ganymed-ssh2使用
  • 原文地址:https://www.cnblogs.com/mmbbflyer/p/6483196.html
Copyright © 2011-2022 走看看