[英]using ServiceStack.Text: determine JSON is Array, Object or String?
[英]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.