2017-07-22 11 views
-2

入力JSON使用して別のものに変換します1つのJSON構造がJson.Net

{ 
    "name" : "objname", 
    "abc" : 1, 
    "def" : 2 
} 

所望の出力JSON:

{ 
    "objname" : 
    { 
     "abc" : 1, 
     "def" : 2 
    } 
} 

を下記のように私が試したが、私はそれが正しい方法ではない感じ。

// This is the class object 
public class Obj 
{ 
    public string Name { get;set;} 
    public string abc { get; set; } 
    public string def { get; set; } 
}   

var obj = JsonConvert.DeserializeObject<Obj>(json); 

StringBuilder sb = new StringBuilder(); 
sb.Append(" { "); 
sb.AppendLine(obj.Name); 
sb.AppendLine(" : {"); 
sb.AppendLine(GetMemberName(() => obj.abc) + ":" + obj.abc + ","); 
sb.AppendLine(GetMemberName(() => obj.def) + ":" + obj.abc); 
sb.AppendLine(" : }"); 
+0

入力が無効JSONであるので、出力 –

+2

1)希望出力 ' "objnameに" ある:{ "ABC" を1、 "DEF" :2} 'はJSONでもなく、外側の' {'と'} 'がありません。 2)これまでに何を試しましたか? – dbc

+0

このパッケージのホームページをご覧ください。 http://www.newtonsoft.com/json SerializeとDeserializeObjectが表示されます。それがあなたが必要とするものです。ここで質問する前に試してみてください。 –

答えて

1

最初の手順はデシリアライズです。

Dictionary<string, string> dict = 
    JsonConvert.DeserializeObject<Dictionary<string, object>>(json); 

次に戻ってくるには、おそらく辞書を使う必要があります。プロパティ名がわからないので、あらかじめ定義された(コンパイラ生成された)クラスを使用することはできません。

String name = (string)dict["name"]; 
// remove name from dictionary 
dict.Remove(name); 
var output = 
    new Dictionary<string,object>() {{name, dict}}; 

そして、それはバックアウト保存:

string json = JsonConvert.SerializeObject(output); 
+0

これは**要求された出力を生成しません** => [.net fiddle](https://dotnetfiddle.net/vlCaqA) –

+1

代わりに 'Dictionary 'にデシリアライズする必要があります= .net fiddle](https://dotnetfiddle.net/Ml1FRX) –

+0

うん、typo。固定 –