2016-06-18 6 views
0

diese json Bedenken Sie:JSON.net SelectToken() mit Apostroph in Pfad

{ 
    "farms": [ 
     { 
      "fred's": { 
       "cows": 5, 
       "pigs": 2, 
       "horses": "none" 
      } 
     }, { 
      "old mcdonald's": { 
       "cows": none, 
       "pigs": 1, 
       "horses": 3 
      } 
     } 
    ] 
} 

Es scheint allein mit der Verwendung von einfachen Anführungszeichen kein Problem zu sein:

JObject j = new JObject(); 
JToken jt = j.SelectToken(farms.fred's); 

jedoch Fehler auftreten, wenn man versucht, Verwenden Sie sowohl einfache Anführungszeichen als auch Leerzeichen.

Mit diesem Code:

JObject j = new JObject(); 
JToken jt = j.SelectToken(farms.old mcdonald's); 

ich diesen Fehler habe:

[' '] 
:

JsonException: Unexpected character while parsing path

Also habe ich einige der Suche und fand, dass Begriffe mit weißen Flächen müssen von umgeben sein

Beispiel:

JObject j = new JObject(); 
JToken jt = j.SelectToken(farms.['old mcdonald's']); 

Doch jetzt ist der Fehler:

JsonException: Unexpected character while parsing path indexer: s

Ist es möglich, sowohl weißen Räume und einfache Anführungszeichen in dem SelectToken Pfad enthält?

Antwort

2

Scheint so ...

var x = @"{ 
    ""farms"": [ 
     { 
      ""fred's"": { 
       ""cows"": 5, 
       ""pigs"": 2, 
       ""horses"": ""none"" 
      } 
     }, 
     { 
      ""old mcdonald's"": { 
       ""cows"": ""none"", 
       ""pigs"": 1, 
       ""horses"": 3 
      } 
     } 
    ] 
}"; 

var j = JObject.Parse(x); 
var jobj = j.SelectToken("farms[1]['old mcdonald\\'s']") as JObject; 
jobj.Properties().Select(p => p.Name + ": " + p.Value).Dump(); 

IEnumerable<String> (3 items) 
* cows: none 
* pigs: 1 
* horses: 3 
+0

Vielen Dank für die schnelle Antwort, aber ich bin immer noch ein Fehler. Während bei SelectToken kein Fehler mehr auftritt, gibt SelectToken jetzt null zurück. – fractal

+0

@fractal Laden Sie LINQPad, https://www.linqpad.net herunter, kopieren Sie den Code und fügen Sie den Code ein, setzen Sie ** Sprache **: 'C# Statements 'und führen Sie ihn aus. Es sollte funktionieren. Ich vermute 'null' ist ein Hinweis darauf, dass ein Problem mit dem Code * in Ihrem Programm * vorliegt. Vielleicht fehlende 'Farmen [1]'. –

+0

Sie haben Recht. Es war ein Problem mit Code in meinem Programm. Ich schätze die Hilfe sehr. – fractal