web-dev-qa-db-ja.com

JObjectにJObjectを追加

私はこのようなjson構造を持っています:

var json = 
{
  "report": {},
  "expense": {},
  "invoices": {},
  "projects": {},
  "clients": {},
  "settings": {
    "users": {},
    "companies": {},
    "templates": {},
    "translations": {},
    "license": {},
    "backups": {},
  }
}

Jsonに「レポート」:{}のような新しい空のオブジェクトを追加したい

私のC#コードは次のようなものです:

JObject json = JObject.Parse(File.ReadAllText("path"));
json.Add(new JObject(fm.Name));

しかし、それは私に例外を与えます:Newtonsoft.Json.Linq.JValueをNewtonsoft.Json.Linq.JObjectに追加できません

だから、jsonに新しい空のJObjectをどのように追加できますか

前もって感謝します

13
DoobieAsDave

JObjectを文字列(JValueに変換される)で構築しようとしているため、このエラーが発生しています。 JObjectには、JValueを直接含めることも、別のJObjectを含めることもできません。 JPropertiesのみを含むことができます(順番に、他のJObjectsJArraysまたはJValuesを含むことができます)。

動作させるには、2行目を次のように変更します。

json.Add(new JProperty(fm.Name, new JObject()));

作業デモ: https://dotnetfiddle.net/cjtoJn

17
Brian Rogers

もう一つの例

var jArray = new JArray {
    new JObject
    {
        new JProperty("Property1",
            new JObject
            {
                new JProperty("Property1_1", "SomeValue"),
                new JProperty("Property1_2", "SomeValue"),
            }
        ),
        new JProperty("Property2", "SomeValue"),
    }
};
2
json["report"] = new JObject
    {
        { "name", fm.Name }
    };

Newtonsoftでは、より直接的なアプローチを使用しており、角括弧[]JObjectを設定するだけで、Newtonsoftの仕様に基づいて作成する必要があります。

完全なコード:

var json = JObject.Parse(@"
{
    ""report"": {},
    ""expense"": {},
    ""invoices"": {},
    ""settings"": {
        ""users"" : {}
    },
}");

Console.WriteLine(json.ToString());

json["report"] = new JObject
    {
        { "name", fm.Name }
    };

Console.WriteLine(json.ToString());

出力:

{
  "report": {},
  "expense": {},
  "invoices": {},
  "settings": {
    "users": {}
  }
}

{
  "report": {
    "name": "SomeValue"
  },
  "expense": {},
  "invoices": {},
  "settings": {
    "users": {}
  }
}

参考として、次のリンクをご覧ください。 https://www.newtonsoft.com/json/help/html/ModifyJson.htm

2
Tatranskymedved