使用Newtonsoft.Json讀寫Json字串
阿新 • • 發佈:2019-01-11
/// <summary>
/// 處理層巢狀資料
/// 最大支援四層
/// </summary>
public static List<string[]> GetDataForCommon(string data, int deepCount)
{
List<string[]> stringList = new List<string[]>();
string[] temp = data.Split('+' );
if (temp.Length != 3 || string.IsNullOrEmpty(temp[2]))
{
return null;
}
JObject jO = JObject.Parse(temp[2]);
JToken jData = jO.GetValue("data");
if (jData == null)
{
return null;
}
var deepData1 = ((JObject)jData).Properties().GetEnumerator();
if (deepCount == 1)
{
while (deepData1.MoveNext())
{
string[] strs = new string[5];
if (deepData1.Current == null)
{
continue;
}
strs[4] = temp[0];
strs[0] = deepData1.Current.Name;
JArray jArray = deepData1.Current.Value as JArray;
if (jArray == null)
{
continue;
}
strs[1] = jArray[0].ToString();
strs[2] = jArray[1].ToString();
strs[3] = jArray[2].ToString();
stringList.Add(strs);
}
}
else if (deepCount == 2)
{
while (deepData1.MoveNext())
{
if (deepData1.Current == null)
{
continue;
}
var deepData2 = ((JObject)deepData1.Current.Value).Properties().GetEnumerator();
while (deepData2.MoveNext())
{
if (deepData2.Current == null)
{
continue;
}
string[] strs = new string[6];
strs[5] = temp[0];
strs[0] = deepData1.Current.Name;
strs[1] = deepData2.Current.Name;
JArray jArray = deepData2.Current.Value as JArray;
if (jArray == null)
{
continue;
}
strs[2] = jArray[0].ToString();
strs[3] = jArray[1].ToString();
strs[4] = jArray[2].ToString();
stringList.Add(strs);
}
}
}
else if (deepCount == 3)
{
while (deepData1.MoveNext())
{
if (deepData1.Current == null)
{
continue;
}
var deepData2 = ((JObject)deepData1.Current.Value).Properties().GetEnumerator();
while (deepData2.MoveNext())
{
if (deepData2.Current == null) continue;
var deepData3 = ((JObject)deepData2.Current.Value).Properties().GetEnumerator();
while (deepData3.MoveNext())
{
if (deepData3.Current == null) continue;
string[] strs = new string[7];
strs[6] = temp[0];
strs[0] = deepData1.Current.Name;
strs[1] = deepData2.Current.Name;
strs[2] = deepData3.Current.Name;
JArray jArray = deepData3.Current.Value as JArray;
if (jArray == null)
{
continue;
}
strs[3] = jArray[0].ToString();
strs[4] = jArray[1].ToString();
strs[5] = jArray[2].ToString();
stringList.Add(strs);
}
}
}
}
else if (deepCount == 4)
{
while (deepData1.MoveNext())
{
if (deepData1.Current == null)
{
continue;
}
var deepData2 = ((JObject)deepData1.Current.Value).Properties().GetEnumerator();
while (deepData2.MoveNext())
{
if (deepData2.Current == null) continue;
var deepData3 = ((JObject)deepData2.Current.Value).Properties().GetEnumerator();
while (deepData3.MoveNext())
{
if (deepData3.Current == null) continue;
var deepData4 = ((JObject)deepData3.Current.Value).Properties().GetEnumerator();
while (deepData4.MoveNext())
{
if (deepData4.Current == null) continue;
string[] strs = new string[8];
strs[7] = temp[0];
strs[0] = deepData1.Current.Name;
strs[1] = deepData2.Current.Name;
strs[2] = deepData3.Current.Name;
strs[3] = deepData4.Current.Name;
JArray jArray = deepData4.Current.Value as JArray;
if (jArray == null)
{
continue;
}
strs[4] = jArray[0].ToString();
strs[5] = jArray[1].ToString();
strs[6] = jArray[2].ToString();
stringList.Add(strs);
}
}
}
}
}
else
{
//MessageBox.Show("維數太高,沒寫解析方法,最大支援4維");
}
return stringList;
}