簡體   English   中英

我可以在C#中訪問對象的字段嗎

[英]Can I access fields of an Object in C#

我正在使用Newtonsoft.Json.JsonConvert.DeserializeObject(string str)將字符串轉換為.Net對象。 該字符串的實際類型可以是多個,並且沒有其他信息可以指示此字符串的類型。 但我可以確認字符串消息就像是一個普通類的派生類對象Message ,並在領域Message但可以告訴真正的類型, Message有一個像場int type 字符串是MessageAMessageB或其他所有具有不同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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM