背景
之前在對接第三方的api的時候,對方給的數據格式是這樣的json
就是沒有欄位內容這一說 ,都是數據,而且格式還是不固定的。
第一眼看到這東西,心裏第一反應是想罵人,但是沒辦法,睡覺人家是大爺。
那就的想辦法解析成我們看得懂的數據。
思路
仔細觀察發現,鍵值對的規律是第一個欄位是string 型別,但是第二個是物件型別。加上沒有欄位名稱。所以第一想到的是Dictionary。
下面看下Dictionary特性
必須包含名空間System.Collection.Generic
Dictionary裏面的每一個元素都是一個鍵值對(由二個元素組成:鍵和值)
鍵必須是唯一的,而值不需要唯一的
鍵和值都可以是任何型別(比如:string, int, 自訂型別,等等)
透過一個鍵讀取一個值的時間是接近O(1)
鍵值對之間的偏序可以不定義
所以對應的c# 型別是 Dictionary< string , dynamic >> 。
眼見為實,那麽接下來我們來驗證下是否可行。
1、nuget參照 using Newtonsoft.Json ;
2、準備一段數據
{
"r545454aa":"gfgf方(rttr)",
"111":"機trtrrt",
"rrr":"2022-02-11",
"tt":[
"ghhg",
"nbbn"
],
"545454":"fdfdfd"
}
3、解析
Jso
nConvert.
DeserializeObject
<Dictionary<
string
,
dynamic
>>
privatestringConvertjson(string jsonStr)
{
var model = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonStr);
List<QAModel> list = new List<QAModel>();
foreach (var item in model)
{
。。。。。。。。。。。。
}
}
4、到這裏我們測試發現,數據正常解析了,接下來我們就是對 dynamic 進行再次解析了。
if (item.Value is string)
{
Text = item.Value;
}
else
{
。。。。。。。。。。。。。
}
到此,問題解決。