如何序列化/反序列化对象

时间:2014-02-28 13:04:43

标签: c# mongodb windows-phone-8 bson mlab

我正在编写一个Wp8 / C#库来查询MongoLab的REST Api。 我有一个abtract这样的对象:

[DataContract]
public abstract class Entity
{
    [DataMember(Name = "_id")]
    public string _id { get; set; }
}

字段_id由Mongo自动生成为ObjectId。但是使用WP8,我没有mongoDb C#驱动程序......序列化和反序列化不起作用....

这是我尝试过的:

var str = url;
var response = await _httpClient.GetAsync(str);
var rep = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(rep);

我也试过过Datacontractjsonserializer。

我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:1)

这是我为处理.NET 3.5中的JSON序列化和反序列化而编写的一个类 不要忘记添加对System.ServiceModel.Web.dll

的引用

您可以使用JsonTools.ObjectToJsonString(rep);

using System;
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;

namespace Utilities
{
    /// <summary>
    /// Group of static methods for dealing with JSON.
    /// </summary>
    public static class JsonTools
    {
        /// <summary>
        /// Serializes an object to JSON string.
        /// </summary>
        /// <param name="obj">The object to serialize. </param>
        /// <returns></returns>
        /// <exception cref="System.Runtime.Serialization.InvalidDataContractException"></exception>
        /// <exception cref="System.Runtime.Serialization.SerializationException"></exception>
        /// <exception cref="System.ServiceModel.QuotaExceededExceptionn"></exception>        
        public static string ObjectToJsonString(object obj)
        {
            try
            {
                MemoryStream jsonStream = new MemoryStream();
                DataContractJsonSerializer js = new DataContractJsonSerializer(obj.GetType());
                js.WriteObject(jsonStream, obj);
                jsonStream.Position = 0;

                StreamReader sr = new StreamReader(jsonStream);
                return sr.ReadToEnd();
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// Serializes an object to JSON byte array.
        /// </summary>
        /// <param name="obj">The object to serialize. </param>
        /// <returns></returns>
        /// <exception cref="System.Runtime.Serialization.InvalidDataContractException"></exception>
        /// <exception cref="System.Runtime.Serialization.SerializationException"></exception>
        /// <exception cref="System.ServiceModel.QuotaExceededExceptionn"></exception>  
        public static byte[] ObjectToJsonByteArray(object obj)
        {
            try
            {
                MemoryStream jsonStream = new MemoryStream();
                DataContractJsonSerializer js = new DataContractJsonSerializer(obj.GetType());
                js.WriteObject(jsonStream, obj);
                jsonStream.Position = 0;

                return jsonStream.ToArray();
            }
            catch (Exception)
            {
                throw;
            }
        }


        /// <summary>
        /// Deserializes a JSON formatted string to an object of the defined type
        /// </summary>
        /// <param name="jsonString">JSON formatted string</param>
        /// <param name="objType">The type of the object which the jsonString is to be Deserialized to.</param>
        /// <returns>Deserialized object</returns>
        /// <exception cref="System.Runtime.Serialization.SerializationException"></exception>
        public static object JsonStringToObject(string jsonString, Type objType)
        {
            try
            {
                DataContractJsonSerializer js = new DataContractJsonSerializer(objType);
                byte[] jsonBytes = Encoding.Default.GetBytes(jsonString);
                MemoryStream jsonStream = new MemoryStream(jsonBytes);

                return js.ReadObject(jsonStream);
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// Deserializes a JSON formatted byte array to an object of the defined type
        /// </summary>
        /// <param name="jsonBytes">JSON formatted byte array</param>
        /// <param name="objType">The type of the object which the jsonString is to be Deserialized to.</param>
        /// <returns>Deserialized object</returns>
        /// <exception cref="System.Runtime.Serialization.SerializationException"></exception>
        public static object JsonByteArrayToObject(byte[] jsonBytes, Type objType)
        {
            try
            {
                DataContractJsonSerializer js = new DataContractJsonSerializer(objType);
                MemoryStream jsonStream = new MemoryStream(jsonBytes);

                return js.ReadObject(jsonStream);
            }
            catch (Exception)
            {
                throw;
            }
        }


    }
}