45

MVC 4 プログラムで Json.net を使用しています。

itemclassのオブジェクトがありますItem

やった: string j = JsonConvert.SerializeObject(item);

"feeClass" : "A"次に、 intoなどの追加のプロパティを追加しjます。

Json.net を使用してこれを達成するにはどうすればよいですか?

4

3 に答える 3

81

いくつかのオプションがあります。

@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 つの可能性はJsonConverterItemクラスのカスタムを作成し、シリアル化中にそれを使用することです。を使用するJsonConverterと、特定のクラスのシリアル化プロセス中に書き込まれる内容を完全に制御できます。必要に応じて、プロパティを追加したり、プロパティを抑制したり、別の構造を書き出すこともできます。この特定の状況では、おそらくやり過ぎだと思いますが、別のオプションです。

于 2013-09-09T15:16:53.313 に答える
4

ExpandoObject を使用できます。それにデシリアライズし、プロパティを追加して、シリアライズして戻します。

擬似コード:

Expando obj = JsonConvert.Deserializeobject<Expando>(jsonstring);
obj.AddeProp = "somevalue";
string addedPropString = JsonConvert.Serializeobject(obj);
于 2017-01-09T20:09:43.630 に答える