45

我在我的 MVC 4 程序中使用 Json.net。

我有一个item类对象Item

我做了: string j = JsonConvert.SerializeObject(item);

现在我想添加一个额外的属性,比如"feeClass" : "A"into j

我怎样才能使用 Json.net 来实现这一点?

4

3 回答 3

81

你有几个选择。

正如@Manvik 建议的那样,最简单的方法就是在您的类中添加另一个属性并在序列化之前设置其值。

如果您不想这样做,下一个最简单的方法是将对象加载到 aJObject中,附加新的属性值,然后从那里写出 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"
}

JsonConverter另一种可能性是为您的类创建一个自定义Item并在序列化期间使用它。AJsonConverter允许您完全控制在特定类的序列化过程中写入的内容。如果需要,您可以添加属性、抑制属性,甚至可以写出不同的结构。对于这种特殊情况,我认为这可能是矫枉过正,但这是另一种选择。

于 2013-09-09T15:16:53.313 回答
5

以下是我可以实现的最干净的方式

dynamic obj = JsonConvert.DeserializeObject(jsonstring);
obj.NewProperty = "value";
var payload = JsonConvert.SerializeObject(obj);
于 2020-07-31T12:08:53.520 回答
4

您可以使用 ExpandoObject。反序列化,添加你的属性,然后序列化回来。

伪代码:

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