Ответ 1
Использование JS Utils в ServiceStack.Common является предпочтительным способом десериализации adhoc JSON с неизвестными типами, поскольку он возвращает соответствующий объект С# на основе полезной нагрузки JSON, например десериализацию объекта с помощью:
var obj = JSON.parse("{\"Id\":\"..\"}");
Вернет свободно напечатанный Dictionary<string,object>
который вы можете привести к динамическому содержимому объекта JSON:
if (obj is Dictionary<string,object> dict) {
var id = (string)dict["Id"];
}
Но если вы предпочитаете использовать ServiceStack.Text напечатал JSON сериализаторы, он не может десериализации в объект, так как он не знает, какой тип для десериализации в так она оставляет его в виде строки, которая является объектом.
Рассмотрите возможность использования динамических API ServiceStack для десериализации произвольного 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 преобразовывать типы объектов в словарь, например:
JsConfig.ConvertObjectTypesIntoStringDictionary = true;
var map = (Dictionary<string, object>)json.FromJson<object>();
map.PrintDump();