MVC 4 プログラムで Json.net を使用しています。
item
classのオブジェクトがありますItem
。
やった:
string j = JsonConvert.SerializeObject(item);
"feeClass" : "A"
次に、 intoなどの追加のプロパティを追加しj
ます。
Json.net を使用してこれを達成するにはどうすればよいですか?
いくつかのオプションがあります。
@Manvikが提案したように、最も簡単な方法は、別のプロパティをクラスに追加し、シリアル化する前にその値を設定することです。
それをしたくない場合、次に簡単な方法は、オブジェクトを にロードしJObject
、新しいプロパティ値を追加して、そこから JSON を書き出すことです。簡単な例を次に示します。
class Item
{
public int ID { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Item item = new Item { ID = 1234, Name = "FooBar" };
JObject jo = JObject.FromObject(item);
jo.Add("feeClass", "A");
string json = jo.ToString();
Console.WriteLine(json);
}
}
上記の出力は次のとおりです。
{
"ID": 1234,
"Name": "FooBar",
"feeClass": "A"
}
もう 1 つの可能性はJsonConverter
、Item
クラスのカスタムを作成し、シリアル化中にそれを使用することです。を使用するJsonConverter
と、特定のクラスのシリアル化プロセス中に書き込まれる内容を完全に制御できます。必要に応じて、プロパティを追加したり、プロパティを抑制したり、別の構造を書き出すこともできます。この特定の状況では、おそらくやり過ぎだと思いますが、別のオプションです。
ExpandoObject を使用できます。それにデシリアライズし、プロパティを追加して、シリアライズして戻します。
擬似コード:
Expando obj = JsonConvert.Deserializeobject<Expando>(jsonstring);
obj.AddeProp = "somevalue";
string addedPropString = JsonConvert.Serializeobject(obj);