zoukankan      html  css  js  c++  java
  • JavaScriptSerializer,DataContractJsonSerializer解析JSON字符串功能小记

    JsonAbout:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Web.Script.Serialization;
    using System.Runtime.Serialization.Json;

    namespace ConsoleApplicationTest
    {
    public class JsonAbout
    {
    public static T Json2ModelJS<T>(string JsonStr)
    {
    JavaScriptSerializer jss
    = new JavaScriptSerializer();
    T userJson
    = jss.Deserialize<T>(JsonStr);
    return userJson;
    }

    public static string Model2JsonJS<T>(T model)
    {
    JavaScriptSerializer jss
    = new JavaScriptSerializer();
    string userJson = jss.Serialize(model);
    return userJson;
    }

    public static T Json2Model<T>(string jsonString)
    {
    using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
    {
    return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
    }
    }

    public static string Model2Json<T>(T jsonObject)
    {
    using (var ms = new MemoryStream())
    {
    new DataContractJsonSerializer(typeof(T)).WriteObject(ms, jsonObject);
    return Encoding.UTF8.GetString(ms.ToArray());
    }
    }
    }
    }

      测试类:

    public class JsonModelDemo
    {
    public void Show()
    {
    string jsonA = "{\"IDA\":1,\"NameA\":\"A\",\"B\":{\"IDB\":2,\"NameB\":\"B\"}}";
    string jsonB = "{\"Msg\":\"Test\",\"Data\":{\"IDA\":1,\"NameA\":\"A\",\"B\":[{\"IDB\":2,\"NameB\":\"B1\"},{\"IDB\":3,\"NameB\":\"B2\"}]}}";
    Console.WriteLine(
    "DataContractJsonSerializer:");
    A a1
    = JsonAbout.Json2Model<A>(jsonA);
    B b1
    = JsonAbout.Json2Model<B>(jsonA);
    A a2
    = JsonAbout.Json2Model<A>(jsonB);
    B b2
    = JsonAbout.Json2Model<B>(jsonB);
    Output(a1);
    Output(b1);
    Output(a2);
    Output(b2);

    Console.WriteLine(
    "JavaScriptSerializer:");
    A a3
    = JsonAbout.Json2ModelJS<A>(jsonA);
    B b3
    = JsonAbout.Json2ModelJS<B>(jsonA);
    A a4
    = JsonAbout.Json2ModelJS<A>(jsonB);
    B b4
    = JsonAbout.Json2ModelJS<B>(jsonB);
    Output(a3);
    Output(b3);
    Output(a4);
    Output(b4);
    }

    private void Output(A a)
    {
    Console.WriteLine(
    "IDA:"+a.IDA + ", NameA:" + a.NameA);
    if (a.b != null)
    {
    Console.WriteLine(
    "B:"+a.b.IDB+","+a.b.NameB);
    }
    }
    private void Output(B b)
    {
    Console.WriteLine(
    "IDB:" + b.IDB + ", NameB:" + b.NameB);
    }
    }
    public class A
    {
    public int IDA { get; set; }

    public string NameA { get; set; }

    public B b { get; set; }
    }

    public class B
    {
    public int IDB { get; set; }

    public string NameB { get; set; }
    }

      输出:

    DataContractJsonSerializer:
    IDA:
    1, NameA:A
    IDB:
    0, NameB:
    IDA:
    0, NameA:
    IDB:
    0, NameB:
    JavaScriptSerializer:
    IDA:
    1, NameA:A
    B:
    2,B
    IDB:
    0, NameB:
    IDA:
    0, NameA:
    IDB:
    0, NameB:

      结论:JavaScriptSerializer可以识别关联的实体,其他的待验证。

  • 相关阅读:
    elasticsearch CriteriaQuery查询例子
    mysql转ElasticSearch的分析 及JAVA API 初探
    java利用HttpClient进行https接口调用
    JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序
    java爬虫入门
    AndroidStudio升到最新版本(3.1.2)之后
    怎样录制简单GIF动图
    android 集成友盟分享之后,想自定义分享面板的看过来
    Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果
    Android新特性之CardView的简单使用
  • 原文地址:https://www.cnblogs.com/artwl/p/2134316.html
Copyright © 2011-2022 走看看