更多json c#问题

时间:2011-07-20 22:57:29

标签: c# json json.net

这是我之前的一个问题的延续。该解决方案适用于我当时尝试做的事情,但打破了我的大量代码。我知道不要事先确定是不好的做法,但是......你生活和学习。

Anyhoo,这是Q:an easy way to serialise c# objects

我想知道的是:有没有办法让NewtonSoft Library处理这些东西?如果有,怎么样?如果不是,建议?

我正在做的是使用json与RoR3应用聊天,现在我无法对反应进行反序列化。这是一个小代码:

我从RoR得到的回应如下:

[{"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}}]

我正在尝试使用以下命令将其反序列化为Directory对象列表:

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...

我可以通过取消注释[Serializable]来大部分时间反序列化(有时我得到以下错误:'System.Int32'类型的对象无法转换为'OffloadUI.Directory'类型。仍在调查中),我可以序列化通过解开[DataContract]和[DataMember]的所有实例。我需要的是能够双向发挥作用的东西。

1 个答案:

答案 0 :(得分:1)

感谢Zootius,我找到了一个有用的指南。这就是我所做的,就像买了一个:

[JsonObject(MemberSerialization.OptIn)]
public class Directory
{
    [JsonProperty]
    public int id { get; set; }

    [JsonProperty]
    public string name { get; set; }

    [JsonProperty]
    public int parent { get; set; }