zoukankan      html  css  js  c++  java
  • C#: using JsonReader avoid Deserialize Json to dynamic

    
    namespace Test
    {
        using Microshaoft;
        using Test.Models;
        using Newtonsoft.Json;
        using System;
        using System.Web.Script.Serialization;
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(Environment.Version.ToString());
                string json = @"{
                                    ""Header"" :
                                            {
                                                Topic : ""Topic001""
                                                , 'From' : '张三'
                                                , To : ['李四',""jhjhj""]
                                            }
                                    , ""Body"" :
                                            {
                                                ""DisplayName"" : ""杨小军""
                                                , ""PictureUrl"" : null
                                                , ""Title"" : ""总经理""
                                            }
                                }";
                var paths = new string[]
                                    {
                                        "Header.Topic"
                                        , "Body"
                                    };
                string topic = string.Empty;
                JsonReaderHelper.ReadJsonPathsValuesAsStrings
                                    (
                                        json
                                        , paths
                                        , (x, y) =>
                                        {
                                            //if (x == paths[0])
                                            {
                                                topic = y;
                                            }
                                            return true;
                                        }
                                    );
                if (topic == "Topic001")
                {
                    var javaScriptSerializer = new JavaScriptSerializer();
                    //Topic001Message message = SerializerHelper.DataContractSerializerJsonToObject<Topic001Message>(json);
                    Topic001Message message = javaScriptSerializer.Deserialize<Topic001Message>(json);
                    Console.WriteLine(message.Header.To[0]);
                    Console.WriteLine(message.Body.DisplayName);
                    //转义测试
                    message.Body.DisplayName = json;
                    //json = SerializerHelper.DataContractSerializerObjectToJson<Topic001Message>(message);
                    //Console.WriteLine("DataContractSerializerObjectToJson:{0}{1}", "
    	", json);
                    json = javaScriptSerializer.Serialize(message);
                    Console.WriteLine("javaScriptSerializer.Serialize:{0}{1}", "
    	", json);
                    message = javaScriptSerializer.Deserialize<Topic001Message>(json);
                    Console.WriteLine("DisplayName:: {0}", message.Body.DisplayName);
                }
                Console.WriteLine(topic);
                Console.WriteLine("Hello World");
                Console.WriteLine(Environment.Version.ToString());
                Console.ReadLine();
            }
        }
    }
    namespace Microshaoft
    {
        using Newtonsoft.Json;
        using System;
        using System.IO;
        public static class JsonReaderHelper
        {
            public static void ReadJsonPathsValuesAsStrings
                                (
                                    string json
                                    , string[] jsonPaths
                                    , Func<string, string, bool> onReadedOncePathStringValueProcesssFunc = null
                                )
            {
                using (var stringReader = new StringReader(json))
                {
                    using (var jsonReader = new JsonTextReader(stringReader))
                    {
                        bool breakAndReturn = false;
                        while
                            (
                                jsonReader.Read()
                                && !breakAndReturn
                            )
                        {
                            foreach (var x in jsonPaths)
                            {
                                if (x == jsonReader.Path)
                                {
                                    if (onReadedOncePathStringValueProcesssFunc != null)
                                    {
                                        var s = jsonReader.ReadAsString();
                                        breakAndReturn = onReadedOncePathStringValueProcesssFunc
                                                (
                                                    x
                                                    , s
                                                );
                                        if (breakAndReturn)
                                        {
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    namespace Test.Models
    {
        public class MessageHeader
        {
            public string Topic;
            public string From;
            public string[] To;
        }
        public class Topic001Message
        {
            public MessageHeader Header;
            public Topic001Body Body;
        }
        public class Topic001Body
        {
            public string DisplayName;
            public string PictureUrl;
            public string Title;
        }
    }
    namespace Microshaoft
    {
        using System.IO;
        using System.Runtime.Serialization;
        using System.Runtime.Serialization.Formatters.Binary;
        using System.Runtime.Serialization.Formatters.Soap;
        using System.Runtime.Serialization.Json;
        using System.Text;
        using System.Xml;
        using System.Xml.Serialization;
        public static class SerializerHelper
        {
            public static T XmlSerializerXmlToObject<T>(string xml, XmlSerializer serializer = null)
            {
                StringReader stringReader = new StringReader(xml);
                XmlReader xmlReader = XmlReader.Create(stringReader);
                if (serializer == null)
                {
                    serializer = new XmlSerializer(typeof(T));
                }
                return (T)serializer.Deserialize(xmlReader);
            }
            public static string XmlSerializerObjectToXml<T>(T target, XmlSerializer serializer = null, XmlWriterSettings settings = null)
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    using (XmlWriter writer = XmlTextWriter.Create(stream, settings))
                    {
                        if (serializer == null)
                        {
                            serializer = new XmlSerializer(typeof(T));
                        }
                        serializer.Serialize(writer, target);
                        byte[] buffer = StreamDataHelper.ReadDataToBytes(stream);
                        if (settings == null)
                        {
                            settings = writer.Settings;
                        }
                        var e = settings.Encoding;
                        var p = e.GetPreamble().Length;
                        string s = e.GetString(buffer, p, buffer.Length - p);
                        writer.Close();
                        return s;
                    }
                }
            }
            public static string DataContractSerializerObjectToXml<T>(T target, DataContractSerializer serializer)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    serializer.WriteObject(ms, target);
                    byte[] buffer = StreamDataHelper.ReadDataToBytes(ms);
                    string xml = Encoding.UTF8.GetString(buffer);
                    ms.Close();
                    return xml;
                }
            }
            public static string DataContractSerializerObjectToXml<T>(T target)
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                string xml = DataContractSerializerObjectToXml<T>(target, serializer);
                return xml;
            }
            public static T DataContractSerializerXmlToObject<T>(string xml, DataContractSerializer serializer)
            {
                byte[] buffer = Encoding.UTF8.GetBytes(xml);
                using (MemoryStream ms = new MemoryStream(buffer))
                {
                    T target = (T)serializer.ReadObject(ms);
                    ms.Close();
                    return target;
                }
            }
            public static T DataContractSerializerXmlToObject<T>(string xml)
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                byte[] buffer = Encoding.UTF8.GetBytes(xml);
                using (MemoryStream ms = new MemoryStream(buffer))
                {
                    T target = (T)serializer.ReadObject(ms);
                    ms.Close();
                    return target;
                }
            }
            public static string FormatterObjectToSoap<T>(T target)
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    SoapFormatter formatter = new SoapFormatter();
                    formatter.Serialize(stream, target);
                    string soap = Encoding.UTF8.GetString(stream.GetBuffer());
                    return soap;
                }
            }
            public static T FormatterSoapToObject<T>
                                        (
                                            string soap
                                        )
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    SoapFormatter formater = new SoapFormatter();
                    byte[] data = Encoding.UTF8.GetBytes(soap);
                    stream.Write(data, 0, data.Length);
                    stream.Position = 0;
                    T target = (T)formater.Deserialize(stream);
                    return target;
                }
            }
            public static byte[] FormatterObjectToBinary<T>
                                        (
                                            T target
                                        )
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    BinaryFormatter formater = new BinaryFormatter();
                    formater.Serialize(stream, target);
                    byte[] buffer = stream.ToArray();
                    return buffer;
                }
            }
            public static T FormatterBinaryToObject<T>
                                        (
                                            byte[] data
                                        )
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    BinaryFormatter formater = new BinaryFormatter();
                    stream.Write(data, 0, data.Length);
                    stream.Position = 0;
                    T target = (T)formater.Deserialize(stream);
                    return target;
                }
            }
            public static string DataContractSerializerObjectToJson<T>(T target)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                string json = DataContractSerializerObjectToJson<T>(target);
                return json;
            }
            public static string DataContractSerializerObjectToJson<T>(T target, DataContractJsonSerializer serializer)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    serializer.WriteObject(ms, target);
                    string json = Encoding.UTF8.GetString(ms.GetBuffer());
                    ms.Close();
                    return json;
                }
            }
            public static T DataContractSerializerJsonToObject<T>(string json)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                T target = DataContractSerializerJsonToObject<T>(json, serializer);
                return target;
            }
            public static T DataContractSerializerJsonToObject<T>(string json, DataContractJsonSerializer serializer)
            {
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
                T target = (T)serializer.ReadObject(ms);
                ms.Close();
                ms.Dispose();
                ms = null;
                return target;
            }
        }
    }
    namespace Microshaoft
    {
        using System.IO;
        public static class StreamDataHelper
        {
            public static byte[] ReadDataToBytes(Stream stream)
            {
                byte[] buffer = new byte[64 * 1024];
                MemoryStream ms = new MemoryStream();
                int r = 0;
                int l = 0;
                long position = -1;
                if (stream.CanSeek)
                {
                    position = stream.Position;
                    stream.Position = 0;
                }
                while (true)
                {
                    r = stream.Read(buffer, 0, buffer.Length);
                    if (r > 0)
                    {
                        l += r;
                        ms.Write(buffer, 0, r);
                    }
                    else
                    {
                        break;
                    }
                }
                byte[] bytes = new byte[l];
                ms.Position = 0;
                ms.Read(bytes, 0, (int)l);
                ms.Close();
                ms.Dispose();
                ms = null;
                if (position >= 0)
                {
                    stream.Position = position;
                }
                return bytes;
            }
        }
    }
    
    
  • 相关阅读:
    从设计到实现,一步步教你实现Android-Universal-ImageLoader-缓存
    AsyncTask工作机制简介
    获取当前AppDelegate 正在显示的UIViewController
    Jqurey实现相似EasyUI的页面布局
    C++学习笔记(九):作用域和命名空间
    C++学习笔记(八):函数重载、函数指针和函数对象
    C++学习笔记(七):函数
    Stage3D学习笔记(一):3D术语简介
    C++学习笔记(六):复杂数据类型(string、容器和STL)
    C++学习笔记(五):指针和引用
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/3588238.html
Copyright © 2011-2022 走看看