我使用 Json.Net 序列化字典类型的字典,当我向字典添加整数或布尔值时,反序列化时我会得到整数和布尔值。现在我试图将我的代码更改为使用 ServiceStack.Text,因为代码的其他部分存在日期序列化的问题,但现在我在反序列化后将布尔值和整数作为字符串。有没有办法与 Json.Net 具有相同的行为?
这是重现它的代码:https: //gist.github.com/1608951 Test_JsonNet 通过,但 Test_ServiceStack_Text_TypeSerializer 和 Test_ServiceStack_Text_JsonSerializer 都失败
对于无类型的动态负载,最好使用ServiceStack.Common 中的JSON Utils,它可以让您在保留类型的同时解析动态负载,例如:
var obj = JSON.parse(json);
if (obj is new Dictionary<string, object> jsonObj)
{
int b = (int)jsonObj["b"];
bool c = (bool)jsonObj["c"];
}
Run Code Online (Sandbox Code Playgroud)
ServiceStack.Text JSON Serializer 中的一个有目的的设计决策是不为原始值类型发出类型信息,这就是为什么这些值保留为字符串的原因。
您要么必须反序列化为包含类型信息的强类型 POCO:
public class MixType
{
public string a { get; set; }
public int b { get; set; }
public bool c{ get; set; }
}
var mixedMap = new Dictionary<string, object> {
{ "a", "text" },
{ "b", 32 },
{ "c", false },
};
var json = JsonSerializer.SerializeToString(mixedMap);
Console.WriteLine("JSON:\n" + json);
var mixedType = json.FromJson<MixType>();
Assert.AreEqual("text", mixedType.a);
Assert.AreEqual(32, mixedType.b);
Assert.AreEqual(false, mixedType.c);
Run Code Online (Sandbox Code Playgroud)
或者反序列化为 aDictionary<string,string>并自己解析为特定类型。
或者使用 ServiceStack 的动态 API 反序列化。有关如何执行此操作的示例,请参阅ServiceStack 的动态 JSON 测试文件夹。
| 归档时间: |
|
| 查看次数: |
3684 次 |
| 最近记录: |