2014-02-17 17 views
0

我正在計劃代理中工作。我在schedule agent中有json格式的數據。我在日程代理中嘗試了Json.net將json反序列化爲列表,但它在日程代理中不起作用。反序列化json數據而不使用Json.net

任何人都可以告訴我如何可以反序列化JSON數據到列表格式而不使用Jsonssoft.dll?

我使用下面的代碼轉換JSON到列表中,但它給我的childList空...

List<ConferenceModel> childlist = new List<ConferenceModel>(); 
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(responseContent)); 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(childlist.GetType()); 
    childlist = ser.ReadObject(ms) as List<ConferenceModel>; 

這裏是ConferenceModel類

public class Conference 
{ 
    public string id { get; set; } 
    public string datetime { get; set; } 
    public string updateDateTime { get; set; } 
    public int duration { get; set; } 
    public string description { get; set; } 
    private bool _isEditDeleteVisible; 

} 
public class ConferenceModel 
{ 
    public List<Conference> conferences { get; set; } 
} 
+1

確實WP8有['DataContractJsonSerializer'(http://msdn.microsoft.com/en-us/library/system。 runtime.serialization.json.datacontractjsonserializer(v = vs.110)的.aspx)? –

+0

是的,在WP8 DataContractJsonSerializer在那裏。我如何使用它? –

+1

嗯...如果需要添加引用;如果需要添加'using'指令;那麼只需'new'' DataContractJsonSerializer'並按照MSDN中的示例使用它。 –

回答

0

嘗試使用DataContract註釋中您的型號+使用DataContractJsonSerializer它應該工作得很好:

[DataContract] 
public class Conference 
{ 
    [DataMember] 
    public string id { get; set; } 
    [DataMember] 
    public string datetime { get; set; } 
    [DataMember] 
    public string updateDateTime { get; set; } 
    [DataMember] 
    public int duration { get; set; } 
    [DataMember] 
    public string description { get; set; } 
    [IgnoreDataMember] 
    private bool _isEditDeleteVisible; 
} 

[DataContract] 
public class ConferenceModel 
{ 
    [DataMember] 
    public List<Conference> conferences { get; set; } 
} 

編輯: 代碼需要修復,以及 - 這個工作對我來說:

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(s)); 
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(ConferenceModel)); 
ConferenceModel childlist = (ConferenceModel)ser.ReadObject(ms); 
+0

嗨,我試過了,但仍然在「childlist」中獲得了空值。以下是我必須在列表{「會議」中轉換的json:[{「id」:「1369」,「datetime」:「2014-02-19 11:52:00」,「duration」:15,「description 「:」「},{」id「:」1371「,」datetime「:」2014-02-19 16:53:00「,」duration「:15,」description「:」「}]} –

+0

我看現在的問題,我已經解決了我的答案。 –

+0

謝謝,它現在工作。有鑄造問題 –

0

我知道這是一個古老的職位,但我想我會分享。我還在尋找支持動態對象的可靠JSON庫。在我看來,如果你只需要一個簡單的JSON解析器,JSON.NET就太大了。

所以我寫了下面的類。它也在GitHub和NuGet上。

GitHub上:https://github.com/Jay-Rad/JSON_Helper

的NuGet:安裝,包裝JSON_Helper

using System.Collections.Generic; 
using System.Web.Script.Serialization; 

namespace JSON_Helper 
{ 
    public static class JSON 
    { 
     private static JavaScriptSerializer Serializer { get; } = new JavaScriptSerializer(); 
     public static string Encode(object JsonObject) 
     { 
      return Serializer.Serialize(JsonObject); 
     } 
     public static T Decode<T>(string JsonString) 
     { 
      return Serializer.Deserialize<T>(JsonString); 
     } 
     public static dynamic Decode(string JsonString) 
     { 
      var deserialized = Serializer.Deserialize<dynamic>(JsonString); 
      dynamic result = new System.Dynamic.ExpandoObject(); 
      foreach (KeyValuePair<string, object> item in deserialized) 
      { 
       ((IDictionary<string, object>)result).Add(item.Key, item.Value); 
      } 
      return result; 
     } 
    } 
}