요약 : JObject에 JProperty를 추가해야합니다. 단순한. 인덱스 쿼리는 JValue를 반환하므로 대신 JProperty를 얻는 방법을 찾으십시오. :)
받아 들여지는 대답은 보이는 것처럼 질문에 대답하지 않습니다. 특정 속성 뒤에 JProperty를 구체적으로 추가하려면 어떻게해야합니까? 먼저, 내 머리가 제대로 작동하는 용어부터 시작하겠습니다.
- JToken = 다른 모든 유형의 어머니. A JValue, JProperty, JArray 또는 JObject 일 수 있습니다. 이는 구문 분석 메커니즘에 모듈 식 설계를 제공하기위한 것입니다.
- JValue = 모든 Json 값 유형 (문자열, 정수, 부울).
- JProperty = 이름 (식별자) 과 쌍을 이루는 JValue 또는 JContainer (아래 참조 ) . 예를 들면
"name":"value".
- JContainer = 다른 유형 (JObject, JValue)을 포함하는 모든 유형의 어머니.
- JObject = JProperties 컬렉션을 보유하는 JContainer 유형
- JArray = 콜렉션 JValue 또는 JContainer를 보유하는 JContainer 유형.
이제 인덱스 []를 사용하여 Json 항목을 쿼리 할 때 JContainer 또는 JValue (캐스팅 필요) 일 수있는 식별자없이 JToken을 얻지 만 값일 뿐이므로 그 뒤에 아무것도 추가 할 수 없습니다. 자체적으로 변경하고 더 깊은 값을 쿼리 할 수 있지만 예를 들어 그 뒤에는 아무것도 추가 할 수 없습니다.
실제로 얻고 자하는 것은 전체 속성이고 원하는대로 그 뒤에 다른 속성을 추가합니다. 이를 위해를 사용 JOjbect.Property("name")하고 원하는 다른 JProperty를 만든 다음이 사용 AddAfterSelf방법 뒤에 추가하십시오 . 그러면 끝났습니다.
자세한 정보 : http://www.newtonsoft.com/json/help/html/ModifyJson.htm
이것은 내가 수정 한 코드입니다.
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);
}
}
}
JObject.Parse마지막 줄에서 대신 'JToken.Parse'(또는 'JToken.FromObject')를 사용하십시오 . 이것은 문자열과 같은 간단한 객체에도 적용됩니다.