[英]How do I deserialize a complex JSON object in C# .NET?
我有一個 JSON 字符串,我需要一些幫助來反序列化它。
沒有什么對我有用......這是JSON:
{
"response": [{
"loopa": "81ED1A646S894309CA1746FD6B57E5BB46EC18D1FAff",
"drupa": "D4492C3CCE7D6F839B2BASD2F08577F89A27B4ff",
"images": [{
"report": {
"nemo": "unknown"
},
"status": "rock",
"id": "7e6ffe36e-8789e-4c235-87044-56378f08m30df",
"market": 1
},
{
"report": {
"nemo": "unknown"
},
"status": "rock",
"id": "e50e99df3-59563-45673-afj79e-e3f47504sb55e2",
"market": 1
}
]
}]
}
我有一個類的示例,但我不必使用這些類。 我不介意使用其他一些類。
這些是類:
public class Report
{
public string nemo { get; set; }
}
public class Image
{
public Report report { get; set; }
public string status { get; set; }
public string id { get; set; }
public int market { get; set; }
}
public class Response
{
public string loopa { get; set; }
public string drupa{ get; set; }
public Image[] images { get; set; }
}
public class RootObject
{
public Response[] response { get; set; }
}
我想提一下,我已經有了 Newtonsoft.Json,所以我可以使用那里的一些功能。
我怎樣才能做到這一點?
我在我的代碼中使用這樣的,它工作正常
下面是一段你需要編寫的代碼
using System.Web.Script.Serialization;
JavaScriptSerializer oJS = new JavaScriptSerializer();
RootObject oRootObject = new RootObject();
oRootObject = oJS.Deserialize<RootObject>(Your JSon String);
應該只是這樣:
var jobject = JsonConvert.DeserializeObject<RootObject>(jsonstring);
您可以將 json 字符串粘貼到此處: http : //json2csharp.com/以檢查您的類是否正確。
如果您使用 C# 2010 或更新版本,則可以使用動態類型:
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring);
然后您可以使用點表示法訪問動態對象中的屬性和數組:
string nemo = json.response[0].images[0].report.nemo;
首先使用NuGet Package Manager
將newtonsoft.json
包安裝到Visual Studio
然后添加以下代碼:
ClassName ObjectName = JsonConvert.DeserializeObject < ClassName > (jsonObject);
我有一個場景,這個場景幫助了我
JObject
objParserd = JObject
.Parse(jsonString);
JObject
arrayObject1 = ( JObject
)objParserd["d"];
D
myOutput= JsonConvert
.DeserializeObject <D>
(arrayObject1.ToString());
shareInfo 是類:
public class ShareInfo
{
[JsonIgnore]
public readonly DateTime Timestamp = DateTime.Now;
[JsonProperty("sharename")]
public string ShareName = null;
[JsonProperty("readystate")]
public string ReadyState = null;
[JsonProperty("created")]
[JsonConverter(typeof(Newtonsoft.Json.Converters.UnixDateTimeConverter))]
public DateTime? CreatedUtc = null;
[JsonProperty("title")]
public string Title = null;
[JsonProperty("getturl")]
public string GettUrl = null;
[JsonProperty("userid")]
public string UserId = null;
[JsonProperty("fullname")]
public string Fullname = null;
[JsonProperty("files")]
public GettFile.FileInfo[] Files = new GettFile.FileInfo[0];
}
// POST request.
var gett = new WebClient { Encoding = Encoding.UTF8 };
gett.Headers.Add("Content-Type", "application/json");
byte[] request = Encoding.UTF8.GetBytes(jsonArgument.ToString());
byte[] response = gett.UploadData(baseUri.Uri, request);
// Response.
var shareInfo = JsonConvert.DeserializeObject<ShareInfo>(Encoding.UTF8.GetString(response));
public static void Main(string[] args)
{
string json = @" {
""children"": [
{
""url"": ""foo.pdf"",
""expanded"": false,
""label"": ""E14288-Passive-40085-2014_09_26.pdf"",
""last_modified"": ""2014-09-28T11:19:49.000Z"",
""type"": 1,
""size"": 60929
}
]
}";
var result = JsonConvert.DeserializeObject<ChildrenRootObject>(json);
DataTable tbl = DataTableFromObject(result.children);
}
public static DataTable DataTableFromObject<T>(IList<T> list)
{
DataTable tbl = new DataTable();
tbl.TableName = typeof(T).Name;
var propertyInfos = typeof(T).GetProperties();
List<string> columnNames = new List<string>();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
tbl.Columns.Add(propertyInfo.Name, propertyInfo.PropertyType);
columnNames.Add(propertyInfo.Name);
}
foreach(var item in list)
{
DataRow row = tbl.NewRow();
foreach (var name in columnNames)
{
row[name] = item.GetType().GetProperty(name).GetValue(item, null);
}
tbl.Rows.Add(row);
}
return tbl;
}
public class Child
{
public string url { get; set; }
public bool expanded { get; set; }
public string label { get; set; }
public DateTime last_modified { get; set; }
public int type { get; set; }
public int size { get; set; }
}
public class ChildrenRootObject
{
public List<Child> children { get; set; }
}
我正在使用以下內容:
using System.Web.Script.Serialization;
...
public static T ParseResponse<T>(string data)
{
return new JavaScriptSerializer().Deserialize<T>(data);
}
我解決了這個問題,為所有應該反序列化的屬性添加了一個公共設置器。
你可以像下面的一堆代碼一樣解決你的問題
public class Response
{
public string loopa { get; set; }
public string drupa{ get; set; }
public Image[] images { get; set; }
}
public class RootObject<T>
{
public List<T> response{ get; set; }
}
var des = (RootObject<Response>)Newtonsoft.Json.JsonConvert.DeserializeObject(Your JSon String, typeof(RootObject<Response>));
我也遇到了在 C# 中解析和使用 JSON 對象的問題。 我用一些庫檢查了動態類型,但問題總是檢查屬性是否存在。
最后,我偶然發現了這個網頁,它為我節省了很多時間。 它會根據您的 JSON 數據自動創建一個強類型類,您將使用該類與 Newtonsoft 庫一起使用,並且可以完美運行。 它也適用於 C# 以外的語言。
您可以使用 nuget 包Newtonsoft.JSON
來實現這一點:
JsonConvert.DeserializeObject<List<Response>>(yourJsonString)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.