Подтвердить что ты не робот

Как добавить дополнительное свойство в сериализованную строку JSON с помощью json.net?

Я использую Json.net в своей программе MVC 4.

У меня есть объект item класса item.

Я сделал: string j = JsonConvert.SerializeObject(item);

Теперь я хочу добавить дополнительное свойство, например "feeClass" : "A" в j.

Как я могу использовать Json.net для достижения этого?

4b9b3361

Ответ 1

У вас есть несколько вариантов.

Самый простой способ, как предложил @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"
}

Другая возможность - создать пользовательский JsonConverter для вашего класса Item и использовать его во время сериализации. A JsonConverter позволяет вам иметь полный контроль над тем, что написано во время процесса сериализации. Вы можете добавлять свойства, подавлять свойства, изменять имена свойств, даже выписывать другую структуру, если хотите. Для этой конкретной ситуации я думаю, что это, вероятно, слишком много, но это еще один вариант.

Ответ 2

Вы можете использовать ExpandoObject. Отмените это, добавьте свое свойство и сериализуйте назад.

псевдокод:

Expando obj = JsonConvert.Deserializeobject<Expando>(jsonstring);
obj.AddeProp = "somevalue";
string addedPropString = JsonConvert.Serializeobject(obj);