2014-02-28 49 views
0

我正在写一个Wp8/C#库来查询MongoLab的REST Api。 我有一个abtract对象是这样的:如何序列化/反序列化对象

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

字段_id是自动生成由蒙戈作为的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。

我该怎么做?

谢谢

+0

您不需要在标题中放置标签信息,也就是标签的用途。 – crashmstr

+0

你有什么尝试过 - 你说序列化等不起作用 - 你可以分享不起作用的代码吗? – ScruffyDuck

+1

你不能序列化/反序列化抽象类。 –

回答

1

这是一类,我写了处理JSON序列化和反序列化在.net 3.5 不要忘了添加引用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; 
      } 
     } 


    } 
} 
+0

它的工作,但我的_id是一个字典[字符串,对象],它不适用于这个类... – mcdave

+0

我不认为你可以做到这一点与通用类型的对象 – CathalMF