我有一個JSON字符串,我試圖用C#解析。我已經使用JsonConvert將我的數據序列化爲JSON字符串。從C#中的對象(反序列化json)中檢索數據#
這裏是我的示例JSON字符串:
{"names": ["John", "Joe", "Jack"], "nationality": "American"}
我能這個字符串反序列化爲使用JsonConvert.DeserializeObject(x);
的問題是,我不知道如何從對象讀取對象,使用C# 。有人可以幫我嗎?
我有一個JSON字符串,我試圖用C#解析。我已經使用JsonConvert將我的數據序列化爲JSON字符串。從C#中的對象(反序列化json)中檢索數據#
這裏是我的示例JSON字符串:
{"names": ["John", "Joe", "Jack"], "nationality": "American"}
我能這個字符串反序列化爲使用JsonConvert.DeserializeObject(x);
的問題是,我不知道如何從對象讀取對象,使用C# 。有人可以幫我嗎?
public class People
{
[JsonProperty("names")]
public List<string> Names;
[JsonProperty("nationality")]
public string Nationality;
}
其他答案在技術上是正確的,但使用JsonPropertyAttribute
是一個普遍接受的約定。然後使用JsonConvert
:
var people = JsonConvert.DeserializeObject<People>(x);
一個更好的方法是定義一個類與預期的結構,然後用JavaScriptSerializer到反序列化:
class NameSet
{
public IList<string> names { get; set; }
public string nationality { get; set; }
}
var serializer = new JavaScriptSerializer();
var nameset = serializer.Deserialize<NameSet>(jsonString);
謝謝,工作就像一個魅力! – pat
創建一個自定義類這樣的:
public class CustomData
{
public string[] Names { get; set; }
public string Nationality { get; set; }
public CustomData() { }
}
並使用JsonConvert來反序列化喲這種類型的對象:
CustomData data = JsonConvert.DeserializeObject<CustomData>(x);
以下應該足夠了:
public class PeopleGroup {
public string[] names { get; set; }
public string nationality { get; set }
}
var myObject = JsonConvert.DeserializeObject<PeopleGroup>(x);
基本上,你創建一個強類型的對象,並直接deserialise進去。
如果你不想實際上定義一個類時,你可以使用匿名類型:
string json = "{\"names\": [\"John\", \"Joe\", \"Jack\"], \"nationality\": \"American\"}";
// Just defining the structure of the anonymous type
var x = new { names = new string[0], nationality = string.Empty };
x = JsonConvert.DeserializeAnonymousType(json, x);
嗨,剛剛嘗試過這個和它的工作完美,只是想知道是否有任何優勢,使用這種方法與「類」方法,除了更少的代碼當然謝謝 – pat
這個解決方案是_writeable_,但犧牲_readability_,哪一個更重要您取決於您期望在將來查看您的代碼的殺毒程序員數量。 –
@pat兩個缺點:Mi也不是:它創建了一個對象,然後再被扔掉。重大:對象必須在該代碼塊內完全處理,這可能會導致在稍後的日期重構代碼時遇到困難。 –
您應該使用dataContractJsonSerializer類,它是速度更快,最重要的是它是.Net框架的內置類。我將在我的下一個社區中發佈解決方案,那我們如何使用DataContractJsonSerializer類。現在我不能發佈解決方案,因爲在我的最終網絡太慢:(但我會今天發佈。
+1我是一個良好的文檔代碼的粉絲,即使'JsonProperty'不是必需的,我可以通過查看與Json序列化一起使用的對象來知道,而不需要讀取其他代碼行 –