2016-12-21 8 views
0

へのDataTableに変換:最後の7桁の数字がゼロの場合、親がないC#の私はJSON文字列に変換したいC#でのDataTable次ているJSON階層

Nr  |Name |Parent 
1000000000|data |NULL 
1100000000|data1|NULL 
1110000000|data2|NULL 
1110100000|data3|1110000000 
1110200000|data4|1110000000 
1120000000|data5|NULL 
1120100000|data6|1120000000 

が、もし最後の7桁はゼロではなく、上にある要素は親です。 JSON出力は次のようになります。

[{ 
"nr": "1000000000", 
"name": "data", 
"child": [{ 
    "nr": null, 
    "name": null 
}] 
}, { 
"nr": "1100000000", 
"name": "data1", 
"child": [{ 
    "nr": null, 
    "name": null 
}] 
}, { 
"nr": "1110000000", 
"name": "data2", 
"child": [{ 
    "nr": "1110100000", 
    "name": "data3" 
}, { 
    "nr": "1110200000", 
    "name": "data4" 
}] 
}, { 
"nr": "1120000000", 
"name": "data5", 
"child": [{ 
    "nr": "1120100000", 
    "name": "data6" 
}] 
}] 

は、どのように私はC#を使用して目的の結果を得ることができますか? ?私はそれが基本的なプログラミングだと知っていますが、私はそれに苦労しています。

UPDATE:あなたが最初の親のコレクションを移入した後、子供たちを埋めるために必要

[{ 
    "nr": "1000000000", 
    "name": "data", 
    "child": [{ 
     "nr": "", 
     "name": "data" 
    }] 
}, { 
    "nr": "1100000000", 
    "name": "data1", 
    "child": [{ 
     "nr": "", 
     "name": "data1" 
    }] 
}, { 
    "nr": "1110000000", 
    "name": "data2", 
    "child": [{ 
     "nr": "", 
     "name": "data2" 
    }] 
}, { 
    "nr": "1110100000", 
    "name": "data3", 
    "child": [{ 
     "nr": "1110100000", 
     "name": "data3" 
    }] 
}, { 
    "nr": "1110200000", 
    "name": "data4", 
    "child": [{ 
     "nr": "1110200000", 
     "name": "data4" 
    }] 
}, { 
    "nr": "1120000000", 
    "name": "data5", 
    "child": [{ 
     "nr": "1120000000", 
     "name": "data5" 
    }] 
}, { 
    "nr": "1120100000", 
    "name": "data6", 
    "child": [{ 
     "nr": "1120100000", 
     "name": "data6" 
    }] 
}] 
+3

POCOオブジェクトのツリーを作成し、JSONでシリアル化するか、単に文字列として書き出します。同盟国。注意:理想的には、 'null'プロパティを抑制してJSONペイロードサイズを減らしたいとします。 Newtonsoft Jsonコンバーターは、POCOプロパティの属性を使用してこれを行うこともできます。 –

+0

私はあなたの指示に従おうとしました。私が更新した結果 – Hadda

+0

少なくともあなたは基本的な考え方を持っていましたが、あなたのPOCOの人口は*間違っているようです。親と子のエントリを正しく追加していません。 –

答えて

1

私は今、次の

public class Child 
{ 
    public string nr { get; set; } 
    public string name { get; set; } 
} 
public class RootObject 
{ 
    public string nr { get; set; } 
    public string name { get; set; } 
    public List<Child> child { get; set; } 
} 

List<Daten> parent = new List<Daten>(); 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      var innerRow = dt.Rows[i]["Nr"]; 
      var objParent = new Daten(); 
      bool alreadyExists = parent.Any(x => x.nr.Contains(innerRow.ToString())); 

      if (alreadyExists) 
       continue; 

      DataRow[] foundRows = dt.Select("[Nr]='" + innerRow + "'"); 

      for (int k = 0; k < foundRows.Count(); k++) 
      { 
       var objChild = new Bezirke(); 
       objChild.nr = foundRows[k]["Parent"].ToString(); 
       objChild.name = foundRows[k]["Name"].ToString(); 
       objParent.bezirke.Add(objChild); 
      } 

      objParent.nr = innerRow.ToString(); 
      objParent.name = dt.Rows[i]["Name"].ToString(); 
      parent.Add(objParent); 
     } 

     string json = JsonConvert.SerializeObject(parent); 
     Response.Write(json); 

しかし、のような出力を見て行っている

List<RootObject> data = new List<RootObject>(); 

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    if (dt.Rows[i]["Parent"] == null) 
     data.Add(new RootObject 
     { 
      nr= dt.Rows[i]["Nr"], 
      name = dt.Rows[i]["Name"], 
      child = new List<Child>() 
     }); 
} 

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    if (dt.Rows[i]["Parent"] != null) 
    { 
     var parent = data.FirstOrDefault(d => d.nr == dt.Rows[i]["Parent"]); 

     if(parent != null) 
      parent.child.Add(new Child 
      { 
       nr = dt.Rows[i]["Nr"], 
       name = dt.Rows[i]["Name"] 
      }); 
    } 
} 
関連する問題