2016-10-27 1 views
0

Ich erhalte den Fehler "Objekt serialisiert zu Eigenschaft. JObject Instanz erwartet." wenn versucht wird, Folgendes zu verwenden:Json mit Newtonsoft.Json in C# - Objekt serialisiert zu Eigenschaft. JObject Instanz erwartet

 SortedList<string,string> results = new SortedList<string,string>(); 
     results.Add("BOBB", "Bob Brattwurst"); 
     results.Add("DANG", "Dan Germany"); 
     results.Add("KON", "Konrad Plith"); 

     JObject output = JObject.FromObject(
      new JProperty("suggestions", 
       new JArray(
        from r in results 
        orderby r.Value 
        select new JObject(
         new JProperty("value", r.Key), 
         new JProperty("data", r.Value) 
         ) 
       ) 
      ) 
     ); 

Der Fehler tritt auf, wenn die Ausgangsvariable festgelegt wird.

Dies wird in einem Web-Dienst gestellt, und die erwartete sollte Json Ergebnis wie folgt aussehen:

{ 
"suggestions": [ 
    { "value": "BOBB", "data": "Bob Brattwurst" }, 
    { "value": "DANG", "data": "Dan Germany" }, 
    { "value": "KON", "data": "Konraid Plith" } 
] 
} 

ich gegen ein Beispiel geprüft habe festgestellt, i hier: http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm i recht haben jedoch das Problem nicht sehen .

Antwort

2

Sie Ihre Daten in eine benutzerdefinierten Datenstruktur lesen können (oder anonyme Typen, wenn Sie bevorzugen), welche für Ihre json:

public class JsonContainer 
{ 
    [JsonProperty("suggestions")] 
    public List<JsonData> Suggestions { get;set; } 
} 

public class JsonData 
{ 
    [JsonProperty("value")] 
    public string Value { get; set; } 

    [JsonProperty("data")] 
    public string Data { get; set; } 
} 


// ... 

var results = new SortedList<string, string>(); 
results.Add("BOBB", "Bob Brattwurst"); 
results.Add("DANG", "Dan Germany"); 
results.Add("KON", "Konrad Plith"); 

var container = new JsonDataContainer(); 
container.Suggestions = results.Select(r => new JsonData 
{ 
    Value = r.Key, 
    Data = r.Value 
}).ToList(); 

var json = JsonConvert.SerializeObject(container); 
1

Eine Lösung vielleicht die Daten in ein anoymous Objekt zu lesen, nach einem ähnlichen nimm heinzbeinz.

SortedList<string, string> results = new SortedList<string, string>(); 
     results.Add("BOBB", "Bob Brattwurst"); 
     results.Add("DANG", "Dan Germany"); 
     results.Add("KON", "Konrad Plith"); 

var obj = new 
{ 
    Suggestions = results.Select(x => new { Value = x.Key, Data = x.Value }).ToList() 
}; 

var jsonString = JsonConvert.SerializeObject(obj); 
Verwandte Themen