2016-11-09 2 views
1

Рассмотрим этот код:Список Преобразовать <Property> Для JObject

var joWork = ((JObject) x).Properties() 
    .Where(p => p.Value.Type == JTokenType.String).ToList(); 

Я в конечном итоге с List<JProperty>.

Есть ли быстрый способ использования Linq или функции JSON.NET для преобразования этого объекта List<JProperty> в объект JObject без создания JObject с нуля в цикле?

ответ

8

Yup, вы можете просто передать список в конструктор JObject, а Json.NET сделает все остальное. Вот пример:

using System; 
using System.Linq; 
using Newtonsoft.Json.Linq; 

public class Test 
{ 
    static void Main() 
    { 
     JObject original = JObject.Parse("{ \"x\": \"a\", \"y\": \"b\", \"z\": 1 }"); 
     var properties = original 
      .Properties() 
      .Where(p => p.Value.Type == JTokenType.String) 
      .ToList(); 

     var recreated = new JObject(properties); 
     Console.WriteLine(recreated); 
    } 
} 

Выход:

{ 
    "x": "a", 
    "y": "b" 
} 

(Свойство z отсутствует, поскольку его значение не является строкой.)

+0

просто любопытно. Но будет ли var obj = list.Cast () работать? –

+2

@PaulStoner: Нет, это делает что-то совершенно другое - это даст «IEnumerable », который генерирует исключение при его повторении по нему, потому что значения в списке не являются ссылками на экземпляры 'JObject'. –

+0

Рад, что я не использовал это в качестве ответа. спасибо –

Смежные вопросы