public void AJson_JsonBuilder_JsonDocument_AppendNew_AdvancedSource_AdvancedNewItem_Succeeds() { Json json = JsonHelper.MakeRootBuilder() .StartDocument() .AddProperty("Sweet", "niblets") .StartProperty("SubDoc") .StartDocument() .AddProperty("SubItem", "dang son!") .End() .StartProperty("Yarr") .StartArray() .AddArrayItem(2) .AddArrayItem(3) .AddArrayItem(6) .End() .Finalize(); Assert.IsFalse(json.HasErrors, "Json parse errors:\n" + String.Join("\n\t", json.Errors)); json.AssertSourceIsValid(); var rootDoc = json.Data as JsonDocument; Assert.IsNotNull(rootDoc); JsonArray array = rootDoc.FindValueByKey("Yarr") as JsonArray; Assert.IsNotNull(array); JsonDocument targetDoc = rootDoc.FindValueByKey("SubDoc") as JsonDocument; Assert.IsNotNull(targetDoc); JsonValue output = targetDoc.AppendNew("Sweeter", JsonHelper.MakeRootBuilder() .StartDocument() .AddProperty("catchPhrase", "Doood")); Assert.IsNotNull(output); JsonDocument outputCasted = output as JsonDocument; Assert.IsNotNull(outputCasted); JsonValue catchPhrase = outputCasted.FindValueByKey("catchPhrase"); Assert.IsNotNull(catchPhrase); Assert.AreEqual("Doood", catchPhrase.StringValue); Assert.AreEqual(catchPhrase, rootDoc.FindValueByKey("catchPhrase")); Json reparsedBeans = JsonHelper.ParseText(json.Data.StringValue); Assert.IsNotNull(reparsedBeans); Assert.IsFalse(reparsedBeans.HasErrors); reparsedBeans.AssertSourceIsValid(); }