我试图理解为什么JSON.Net在添加JArray和JObject的以下两种情况下会修改原始JObject(formSchema) 我定义为vars的对象。
我假设我创建的两个var本身就是独立对象,但看起来它们不是。
在第一种情况下,requiredItems是一个JArray变量,我想在其中将令牌“ certification”添加到formSchema中,但是我放置了Add方法 在requiredItems上。不是formSchema。
在第二种情况下,我使用对ConsertProps的Add方法将certifyProperty添加到formSchema。方便地将属性添加到formSchema 没有直接引用。
这是为什么?它们是否链接在内存中?这在JSON.Net文档中的何处进行了解释?我找不到它。
namespace JSONProps
{
class Program
{
static void Main(string[] args)
{
string jsonSchema = @"
{
""jsonSchema"": {
""type"": ""object"",
""title"": ""a title"",
""properties"": {
""consent"": {
""type"": ""object"",
""title"": ""Consent of Applicant"",
""required"": [
""applicantConsent""
],
""properties"": {
""applicantConsent"": {
""type"": ""boolean"",
""title"": ""I give my Consent"",
},
}
}
}
}
}
";
// First case
var formSchema = JObject.Parse(jsonSchema);
var requiredProps = formSchema["jsonSchema"]["properties"]["consent"]["required"] as JArray;
requiredProps.Add("certification");
// Second case
var consentProps = formSchema["jsonSchema"]["properties"]["consent"]["properties"] as JObject;
var certifyProperty = JObject.Parse(@" { ""type"" : ""boolean"", ""title"" : ""This is true."" } ");
consentProps.Add("certification", certifyProperty);
Console.WriteLine(formSchema.ToString());
}
}
}
$ dotnet run
{
"jsonSchema": {
"type": "object",
"title": "a title",
"properties": {
"consent": {
"type": "object",
"title": "Consent of Applicant",
"required": [
"applicantConsent",
"certification"
],
"properties": {
"applicantConsent": {
"type": "boolean",
"title": "I give my Consent"
},
"certification": {
"type": "boolean",
"title": "This is true."
}
}
}
}
}
}