2016-11-09 5 views
1

このコードを考えてみましょうJOBJECTするには、次の変換リスト<Property>は

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

私はList<JProperty>で終わります。

LinqまたはJSON.NET関数を使用して、List<JProperty>オブジェクトをJObjectに簡単に戻すことはできますか?

答えて

8

あなただけで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:いいえ、全く違うことをしています。リスト内の値が 'JObject'のインスタンスへの参照ではないので、IEnumerable が返されます。 –

+0

嬉しい私はそれを答えとして使用しませんでした。ありがとうございました –

関連する問題