ken*_*ose 7 json scala case-class json4s
我有一个包含许多成员的案例类,其中两个是非原始的:
import com.twitter.util.Duration
case class Foo(
a: Int,
b: Int,
...,
y: Int,
z: Int,
timeoutSeconds: Duration,
runtimeMinutes: Duration)
Run Code Online (Sandbox Code Playgroud)
我想将以下JSON反序列化为此case类的实例:
{
"a": 1,
"b": 2,
// ...
"y": 42,
"z": 43,
"timeoutSeconds": 30,
"runtimeMinutes": 12,
}
Run Code Online (Sandbox Code Playgroud)
通常,我会写json.extract[Foo].然而,MappingException由于timeoutSeconds和,我得到了明显的runtimeMinutes.
我看过FieldSerializer,它允许在AST上进行字段转换.但是,它不够,因为它只允许AST转换.
我也看过扩展CustomSerializer[Duration],但没有办法反省哪个JSON密钥正在被处理(timeoutSeconds或runtimeMinutes).
我也可以尝试延长CustomSerializer[Foo],但后来我将有很多的样板代码,用于提取值a,b,..., z.
理想情况下,我需要一些PartialFunction[JField, T]作为反序列化器的东西,以便我可以写:
{
case ("timeoutSeconds", JInt(timeout) => timeout.seconds
case ("runtimeMinutes", JInt(runtime) => runtime.minutes
}
Run Code Online (Sandbox Code Playgroud)
并依赖于案例类反序列化其余参数.这种结构在json4s中是否可行?
请注意,这类似于组合类型和字段序列化程序,除了我还希望类型反序列化基于JSON键而不同.
小智 0
使用Json.NET
string json = @"{
Run Code Online (Sandbox Code Playgroud)
"a": 1, "b": 2, // ... "y": 42, "z": 43, "timeoutSeconds": 30, "runtimeMinutes": 12, }";
BlogSites bsObj = JsonConvert.DeserializeObject<BlogSites>(json);
Response.Write(bsObj.Name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |