2017-04-18 3 views
0

Der Name einer Eigenschaft in meinem JSON-Objekt muss über eine Zeichenfolge zugewiesen werden, wie kann ich dies mit einem JObject tun? Oder sollte ich gerade JObject.parse von einer Zeichenkette? Ich kenne die .Net Json-Dokumentation, jedoch ist es sehr einfach und zeigt keine Beispiele wie unten.JSON zuweisen JObject Eigenschaft Name mit String-Variable

Hier ist, was ich habe jetzt:

return JObject.FromObject(new { 
attachment = new { 
    type = "template", 
    payload = new { 
     template_type = "button", 
     text = Title, 
     buttons = new { 
      type = type, 
      Variable1 = Value, 
      Variable2 = Payload 
     } 
    }    
} 
}); 

Auch, wenn ich es wie unten beschrieben die string.parse Weise tun, ist dies der beste Weg, um die Zeichenfolge zu formatieren?

JObject.Parse(@"{ 
    attachment : { 
     type : 'template', 
     payload : { 
      template_type : 'button', 
      text : '"[email protected]"', 
       buttons : [{ 
        type : '"[email protected]"', 
        "+Variable1+" : '"[email protected]"', 
        "+Variable2+" : '"[email protected]"' 
       }]  
     } 
    } 
}" 
+1

Ich bin nicht ganz sicher, ob ich die Frage folgen. Was ist im ersten Beispiel die Zeichenfolge, die als Eigenschaftsname verwendet werden soll? – dbc

+0

Verwenden Sie ein 'Dictionary ' –

+0

@ dbc Also Variable1 und Variable2 können im zweiten Beispiel gut zugeordnet werden, da es eine einfache Zeichenfolge ist. Im ersten Beispiel kann ich die Eigenschaftsnamen variable1 und variable2 jedoch nicht mit tatsächlichen Variablen verknüpfen. Wenn ich den Code ausführe, wird der Name Variable1 anstelle des Werts verwendet. – james

Antwort

1

können manuell einen inneren JObject unter Verwendung des Musters aus Creating JSON: Creating JSON with LINQ innerhalb eines äußeren anonymen Typ Objekt enthalten konstruieren, dann das gesamte Objekt zu anonymen JSON serialisieren:

var obj = JObject.FromObject(new 
{ 
    attachment = new 
    { 
     type = "template", 
     payload = new 
     { 
      template_type = "button", 
      text = Title, 
      buttons = new JArray(new JObject(
       new JProperty("type", Type), 
       new JProperty(Variable1, Value), 
       new JProperty(Variable2, Payload))) 
     } 
    } 
}); 

Probe fiddle.

1

Verwenden Sie ein Dictionary<string,object> für buttons, zum Beispiel:

var obj = JObject.FromObject(new 
{ 
    attachment = new 
    { 
     type = "template", 
     payload = new 
     { 
      template_type = "button", 
      text = Title, 
      buttons = new object[] 
      { 
       new Dictionary<string,object>() 
       { 
        { "type", "type" }, 
        { Variable1, Value }, 
        { Variable2, Payload } 
       } 
      } 
     } 
    } 
}); 
+0

Danke, aber jede Idee, dass ich diese Leistung besser als JArray und JObjects wie in der anderen Antwort? – james

+0

@james: Es ist viel weniger fummelig, als eine ganze Menge 'neuer JProperty' überall zu haben. –

+0

Btw Ihre Antwort führt im Durchschnitt von 28ms, wo die andere im Durchschnitt von 10ms auf meinem Mac-Server durchführt. :) – james

Verwandte Themen