2016-12-31 13 views
0

フラットファイルに書き込むためにシーケンスの順序が重要なフラットファイルシステム(フィールドの固定長定義あり - このレガシーシステムは変更できません)があります。私は、JObject内のシーケンス値に基づいてJObjectを取得しようとしています。私は、次のようなJSONオブジェクトを持っている:JObject内のSeq値に基づいてJObjectを取得

{ 
    APPOINTMENT_ID: { 
     value: '', 
     seqPos: 1, 
     dbSize: 2, 
     dbType: 'C', 
     xpath: 'DataSet0' 
     }, 
    NAME: { 
     value: '', 
     seqPos: 2, 
     dbSize: 30, 
     dbType: 'C', 
     xpath: 'DataSet1' 
    }, 
    DATE: { 
     value: '', 
     seqPos: 3, 
     dbSize: 10, 
     dbType: 'M', 
     xpath: 'DataSet2' 
    } 
} 

は現在、私は試合のために、インデックスとJSONをループして、jオブジェクトを設定しています。

JObject joOuter = null; 
for (int i = 1; i <= joNode.Count; i++) 
{ 
    foreach (var jT in joNode) 
    { 
     if (i == jT.Value["seqPos"].Value<int>()) 
     { 
      joOuter = jT.Value.Value<JObject>(); 
      break; 
     } 
    } 
    // Do Work on the JObect 
    joOuter["value"] = "doProcess"; 
} 

私は、全体のJSONを変更し、配列位置するキーを段取りすることなく、代わりに現在のネストされたコードの1つのループでこれを行うにしたいと思います。

答えて

1

私は辞書にそれらのJObjectsをコピーする...

var jObj = JObject.Parse(jsonstr); 
var dict = jObj.Properties().Select(x => x.Value) 
       .ToDictionary(x => (int)x["seqPos"], x => x); 

//loop or access the objects by their index 
dict[2]["value"] = "somevalue"; 

//see, jObj is changed accordingly.... 
var debug = jObj.ToString(Newtonsoft.Json.Formatting.Indented); 
関連する問題