2 Stimmen

Mehr JSON C# Probleme

Dies ist eine Fortsetzung einer früheren Frage von mir. Die Lösung hat für das funktioniert, was ich damals tun wollte, aber brach eine Menge meines Codes. Ich weiß, dass es schlechte Praxis war, nicht sicherzustellen, dass alles vorher funktioniert, aber ja... man lernt dazu.

Wie auch immer, hier ist die Frage: an easy way to serialise c# objects

Was ich wissen möchte ist: Gibt es eine Möglichkeit, dass die NewtonSoft Library damit umgehen kann? Wenn ja, wie? Wenn nicht, Vorschläge?

Was ich mache, ist die Kommunikation mit einer RoR3-App über JSON, jetzt kann ich die Antwort nicht deserialisieren. Hier ist ein kleiner Code:

Die Antwort, die ich von RoR bekomme, sieht so aus:

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

Ich versuche, sie in eine Liste von Directory-Objekten zu deserialisieren, indem ich Folgendes verwende:

public static CompositeCollection deserialise(string json)
    {
        CompositeCollection result = new CompositeCollection();
        JArray arr = JArray.Parse(json);

        foreach (JObject obj in arr)
        {
            result.Add(JsonConvert.DeserializeObject(obj.First.First.ToString()));
        }
        return result;
    }

Und der relevante Teil der Directory-Klasse sieht so aus:

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

Ich kann die meiste Zeit deserialisieren, indem ich [Serializable] kommentiere (manchmal erhalte ich den folgenden Fehler: Objekt des Typs 'System.Int32' kann nicht in Typ 'OffloadUI.Directory' konvertiert werden. noch in Untersuchung), und ich kann serialisieren, indem ich [DataContract] und alle Instanzen von [DataMember] kommentiere. Was ich brauche, ist etwas, das in beide Richtungen funktioniert.

1voto

Sheena Punkte 14544

Dank Zootius habe ich einen nützlichen Leitfaden gefunden. Hier ist, was ich gemacht habe, funktioniert wie gekauft:

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

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X