2
這是我以前的一個問題的延續。該解決方案適用於我當時正在嘗試做的事情,但打破了我的許多代碼。我知道這是不好的做法,不要事先確定,但是耶...你活着學習。更多json c#問題
安美居,這裏的問:an easy way to serialise c# objects
我想知道的是:有沒有辦法讓NewtonSoft庫來處理這個東西?如果是,如何?如果不是,建議?
我在做什麼是使用json聊天到RoR3應用程序,現在我不能反序列化反應。這裏有一個小代碼:
我從回報率得到我的答覆是這樣的:
[{"directory":{"created_at":"2011-07-20T22:29:38Z","drive_info":1,"id":15,"name":"New Drive","parent":0,"size":0,"updated_at":"2011-07-20T22:29:39Z","user":1}}]
我試圖用它deserialise到目錄對象的列表:
public static CompositeCollection deserialise<T>(string json)
{
CompositeCollection result = new CompositeCollection();
JArray arr = JArray.Parse(json);
foreach (JObject obj in arr)
{
result.Add(JsonConvert.DeserializeObject<T>(obj.First.First.ToString()));
}
return result;
}
和目錄類的相關部分看起來像:
// [Serializable]
// [DataContract]
public class Directory
{
// [DataMember]
public int id { get; set; }
// [DataMember]
public string name { get; set; }
// [DataMember]
public int parent { get; set; }
// [DataMember]
public int drive_info { get; set; }
// [DataMember]
public int size { get; set; }
// [DataMember]
public int user { get; set; }
// [DataMember]
public string state
{
get
{
/* if (parent == 0)
return _state.identify();
Directory parental;
return parental.state;*/
if (parental != null)
return parental.state;
return _state.identify();
}
set
{
_state = StateFactory.getState(value);
}
}
//[JsonIgnore]
blah...
我可以反序列化大部分時間unc ommenting [Serializable](有時我得到以下錯誤:'System.Int32'類型的對象不能轉換爲類型'OffloadUI.Directory'。仍然在調查),並且我可以通過解除[DataContract]和[DataMember]的所有實例來連載。我需要的是能夠在兩個方向上工作的東西。
讓你縮短樣本並清楚你實際詢問的內容。到目前爲止,它是更多的「TODO」評論,而不是問題... –
對不起,我想我的問題很清楚。我想知道如何讓它停止拋出異常。 Newtonsoft dll是我的應用程序的不好選擇嗎?還是有辦法讓這個工作? – Sheena
不知道答案,但如果您遇到問題,請嘗試:http://json.codeplex.com/ –