簡體   English   中英

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

[英]How to serialize/deserialize Object

我正在編寫一個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。

我怎樣才能做到這一點?

謝謝

這是我為處理.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;
            }
        }


    }
}

protobuf 和列表<object> - 如何序列化/反序列化?<div id="text_translate"><p> 我有一個List&lt;object&gt; ,其中包含不同類型的對象,例如整數、字符串和自定義類型。 所有自定義類型都經過 protobuf 調整。 我現在想做的是用 protobuf.net 序列化/反序列化這個列表。 到目前為止,我懷疑我必須顯式聲明每種類型,不幸的是,這些混合列表構造不可能做到這一點。 因為二進制格式化程序在做這些事情時沒有問題,我希望我錯過了一些東西,你可以幫助我。 所以我的問題是如何處理 protobuf.net 中的對象。</p></div></object>

[英]protobuf and List<object> - how to serialize / deserialize?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM