[英]Can I access fields of an Object in C#
我正在使用Newtonsoft.Json.JsonConvert.DeserializeObject(string str)
將字符串轉換為.Net對象。 該字符串的實際類型可以是多個,並且沒有其他信息可以指示此字符串的類型。 但我可以確認字符串消息就像是一個普通類的派生類對象Message
,並在領域Message
但可以告訴真正的類型, Message
有一個像場int type
。 字符串是MessageA
或MessageB
或其他所有具有不同type
的字符串。
如果將其轉換為對象,則可以在Visual Studio調試器中看到該對象具有Json字符串中描述的字段。 但是我無法訪問這些字段。 將此對象轉換為Message會失敗,並進行錯誤的轉換。
我現在要做的是先將字符串轉換為Message
並查看類型,然后再次轉換。 這不是首選。 那么我可以將其轉換為可以讀取所有數據的內容嗎? 另一個選擇是字典,但我有一些數字字段。 還有其他建議嗎?
當在JSON對象上使用JsonConvert.DeserializeObject(string str)
時,將返回JObject
。 您可以直接使用它(例如,使用DeserializeObject<JObject>
顯式地鍵入它),也可以將其作為dynamic
來訪問其屬性,例如
var data = @"{""type"": 1, ""otherProperty"": ""Hello!""}";
dynamic obj = JsonConvert.DeserializeObject(data);
if (obj.type == 1)
{
Console.WriteLine(obj.otherProperty); // prints Hello!
}
另外,您提到數字字段是使用字典的問題,但是如果將其設置為Dictionary<string, dynamic>
,則可能會更容易使用:
var data = @"{""type"": 2, ""otherProperty"": 5}";
var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(data);
if (dict["type"] == 2)
{
int i = (int)dict["otherProperty"]; // type is long, so cast is required if you want an int
Console.WriteLine(i); // prints 5
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.