Json.NET конструирует JSON с инициализаторами объектов - PullRequest
0 голосов
/ 25 июня 2018

Я хочу создать объект Json.NET, используя инициализаторы объектов для коллекций.

Я могу сделать:

JObject jsonObject = new JObject { { "Date", DateTime.Now }, { "obj", new JObject { { "string", "bla" } } } };

Теперь я хочу сделать, например:

var j=new HashSet<int> { 5 };
JObject jsonObject = new JObject { { "hashset", j } };

Но я получаю ошибку, потому что нет неявного преобразования из HashSet в JToken

Это работает:

var j=new HashSet<int> { 5 };
JObject jsonObject = new JObject { { "hashset", JToken.FromObject(j) } };

но очень многословно для сложной конструкции.

К сожалению, я не могу использовать методы расширения для добавления неявного преобразования из HashSet в JToken, что, вероятно, было бы идеально.

Есть ли другие способы решить эту проблему?

1 Ответ

0 голосов
/ 25 июня 2018

На самом деле вы используете инициализаторы коллекции , поскольку JObject реализует IEnumerable и имеет метод Add со следующей сигнатурой:

public void Add(string propertyName, JToken value)

Все, что вам нужно, этосоздать Add метод расширения с соответствующей подписью:

namespace Newtonsoft.Json.Linq
{
    public static class JsonExtensions
    {
        public static void Add(this JObject target, string propertyName, object value) =>
            target.Add(propertyName, JToken.FromObject(value));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...