2016-05-04 6 views
3

Ich bin in der Lage meinen Hash deserialise jedoch kann nicht mein Attributfeld zu meiner Attributklasse scheint, hier zu deserialise ist mein json Objektjson nicht zu Klasse deserialising

{ 
     "attribute": { 
      "status": "FWD", 
      "type": "P2p", 
      "cost": "4", 
      "role": "Desg", 
      "priorityNo": "128.1" 
     }, 
     "hash": "50f74cc4c03637b753e884c4dfbd4270089658e5" 
    } 

und hier sind Klassen meiner C#

public class InterfaceObject 
{ 
    public string hash { get; set; } 
    Attribute attribute { get; set; } 
} 

public class Attribute 
{ 
    public string hash { get; set; } 
    public string role { get; set; } 
    public string status { get; set; } 
    public string cost { get; set; } 
    public string priorityNo { get; set; } 
    public string type { get; set; } 
} 

ich kann den Hash in dem Interface-Objekt deserialise jedoch kann nicht meine Attributklasse scheint und hier zu deserialise ist, wie ich versuche, meine Aufgabe zu deserialise

InterfaceObject ifa = JsonConvert.DeserializeObject<InterfaceObject>(message); 
+0

Was verwenden Sie für die Serialisierung/Deserialisierung? – DVK

+0

@DVK Ich verwende newtonsoft JsonConvert.DeserializeObject – Johnathon64

+4

Bitte zeigen Sie Ihren Deserialisierungscode. –

Antwort

0

Der Grund, warum Ihre Deserialisierung nicht ordnungsgemäß funktioniert, ist, wie Crowcoder herausfand, attribute eine Eigenschaft von Gi1/0/1. Sie müssen eine allumfassende Klasse erstellen, die Ihre bereits erstellten Klassen enthält, damit dies funktioniert.

So etwas wie dies tun würde:

public class RootObject 
{ 
    public InterfaceObject iObject { get; set; } 
} 

public class InterfaceObject 
{ 
    public string hash { get; set; } 
    public Attribute attribute { get; set; } 
} 

public class Attribute 
{ 
    public string hash { get; set; } 
    public string role { get; set; } 
    public string status { get; set; } 
    public string cost { get; set; } 
    public string priorityNo { get; set; } 
    public string type { get; set; } 
}  

jedoch jetzt, dass Sie Ihren Original-Beitrag geändert haben, sollten Sie in der Lage sein, ihm die Art und Weise zu analysieren, die Sie haben, vorausgesetzt, Ihr JSON wie die bearbeitete Version aussieht.

4

Sie vermissen public auf Ihrer Eigenschaft. Json.Net kann Werte nicht auf private Eigenschaften festlegen, ohne ein zusätzliches Attribut für die Eigenschaft hinzuzufügen.

public class InterfaceObject 
{ 
    public string hash { get; set; } 
    public Attribute attribute { get; set; } 
} 

hinzufügen public und es wird funktionieren.

+2

FYI, Json.NET * kann nicht-öffentliche Eigenschaften * deserialisieren, aber Sie müssen ein '[JsonProperty]' - Attribut in der Eigenschaft verwenden, um dieses Verhalten zu aktivieren. –