簡體   English   中英

使用ServiceStack.Text將json字符串反序列化為object

[英]Using ServiceStack.Text to deserialize a json string to object

我有一個JSON字符串,看起來像:

"{\"Id\":\"fb1d17c7298c448cb7b91ab7041e9ff6\",\"Name\":\"John\",\"DateOfBirth\":\"\\/Date(317433600000-0000)\\/\"}"

我正在嘗試將其反序列化為object (我正在實現一個緩存接口)

我遇到的麻煩就是我用的時候

JsonSerializer.DeserializeFromString<object>(jsonString);

它回來了

“{ID:6ed7a388b1ac4b528f565f4edf09ba2a,名稱:約翰,出生日期:/日期(317433600000-0000)/}”

是對的嗎?

我無法斷言任何事情......我也不能使用動態關鍵字....

有沒有辦法從ServiceStack.Text庫返回一個匿名對象?

ServiceStack.Common中使用JS Utils是使用未知類型反序列化adhoc JSON的首選方法,因為它將根據JSON有效負載返回相關的C#對象,例如使用以下命令反序列化對象:

var obj = JSON.parse("{\"Id\":\"..\"}");

將返回一個松散類型的Dictionary<string,object> ,您可以將其轉換為訪問JSON對象的動態內容:

if (obj is Dictionary<string,object> dict) {
    var id = (string)dict["Id"];
}

但是,如果您更喜歡使用ServiceStack.Text類型的JSON序列化程序,則它無法反序列化為對象,因為它不知道要反序列化的類型,因此它將其保留為作為對象的字符串。

考慮使用ServiceStack的動態API來反序列化任意JSON,例如:

var json = @"{\"Id\":\"fb1d17c7298c448cb7b91ab7041e9ff6\",
          \"Name\":\"John\",\"DateOfBirth\":\"\\/Date(317433600000-0000)\\/\"}";

var obj = JsonObject.Parse(json);
obj.Get<Guid>("Id").ToString().Print();
obj.Get<string>("Name").Print();
obj.Get<DateTime>("DateOfBirth").ToLongDateString().Print();

或解析為動態:

dynamic dyn = DynamicJson.Deserialize(json);
string id = dyn.Id;
string name = dyn.Name;
string dob = dyn.DateOfBirth;
"DynamicJson: {0}, {1}, {2}".Print(id, name, dob);

另一種選擇是告訴ServiceStack將對象類型轉換為Dictionary,例如:

JsConfig.ConvertObjectTypesIntoStringDictionary = true;
var map = (Dictionary<string, object>)json.FromJson<object>();
map.PrintDump();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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