TL;DR : Vous devez ajouter une JProperty à un JObject. C'est simple. La requête d'index renvoie une JValue, alors trouvez comment obtenir la JProperty à la place :)
La réponse acceptée ne répond pas à la question comme elle le semble. Que faire si je veux ajouter spécifiquement une JProperty après une autre ? Tout d'abord, commençons par les terminologies qui m'ont vraiment fait tourner la tête.
- JToken = La mère de tous les autres types. Il peut être une JValue, une JProperty, un JArray ou un JObject. Ceci afin de fournir une conception modulaire au mécanisme d'analyse syntaxique.
- JValue = tout type de valeur Json (string, int, boolean).
- JProperty = n'importe quelle JValue ou JContainer (voir ci-dessous) jumelée à un nom (identifiant) . Par exemple
"name":"value"
.
- JContainer = La mère de tous les types qui contiennent d'autres types (JObject, JValue).
- JObject = un type de JContainer qui contient une collection de JProperties.
- JArray = un type de JContainer qui contient une collection JValue ou JContainer.
Maintenant, lorsque vous interrogez un élément Json en utilisant l'index [], vous obtenez le JToken sans l'identifiant, qui peut être un JContainer ou une JValue (nécessite un casting), mais vous ne pouvez rien ajouter après, parce que c'est seulement une valeur. Vous pouvez la modifier elle-même, demander des valeurs plus profondes, mais vous ne pouvez rien ajouter après elle, par exemple.
Ce que vous voulez en fait, c'est obtenir la propriété dans son ensemble, puis ajouter une autre propriété après elle, comme vous le souhaitez. Pour cela, vous utilisez JOjbect.Property("name")
puis créez une autre JProperty de votre choix et ajoutez-la après celle-ci en utilisant AddAfterSelf
méthode. Vous avez alors terminé.
Pour plus d'informations : http://www.newtonsoft.com/json/help/html/ModifyJson.htm
Voici le code que j'ai modifié.
public class Program
{
public static void Main()
{
try
{
string jsonText = @"
{
""food"": {
""fruit"": {
""apple"": {
""colour"": ""red"",
""size"": ""small""
},
""orange"": {
""colour"": ""orange"",
""size"": ""large""
}
}
}
}";
var foodJsonObj = JObject.Parse(jsonText);
var bananaJson = JObject.Parse(@"{ ""banana"" : { ""colour"": ""yellow"", ""size"": ""medium""}}");
var fruitJObject = foodJsonObj["food"]["fruit"] as JObject;
fruitJObject.Property("orange").AddAfterSelf(new JProperty("banana", fruitJObject));
Console.WriteLine(foodJsonObj.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.GetType().Name + ": " + ex.Message);
}
}
}