如何为抽象json文档设计类
本文关键字:文档 设计类 json 抽象 | 更新日期: 2023-09-27 18:05:03
假设我们有一个类Request
,我们想要序列化到json并从json反序列化。
class Request {
public string SessionId { get; set; }
...
public string InnerJson { get; set; }
}
作为json,它应该看起来像
{
"SessionId": 1,
...
"InnerJson": {
"some": "json object",
"whatever": 666
}
}
InnerJson
是一些json文档(任意类型)。
Request
用string
代替InnerJson
好吗?
有什么好的方法来设计Request
类吗?
如果您要使用强类型模型,我建议使用工厂模型。为了演示:
public abstract class AbstractOptions { }
public class Options1 : AbstractOptions { public int Whatever { get; set; } }
public class Options2 : AbstractOptions { public string Some { get; set; } }
public class Options3 : AbstractOptions {
[JsonProperty("when")] public DateTime When { get; set; }
[JsonProperty("inner")] public InnerComplexObject Inner { get; set; }
}
public class Request {
[JsonProperty("session-id")] public string SessionId { get; set; }
[JsonProperty("options")] public AbstractOptions Options { get; set; }
}
public class InnerComplexObject { }
然后像这样使用:
var req1 = new Request() { SessionId = "s1", Options = new Options1 { Whatever = 123 } };
var req2 = new Request() { SessionId = "s2", Options = new Options2 { Some = "some" } };
var req3 = new JToken.Request() { SessionId = "s3", Options = new Options3 { When = DateTime.UtcNow, Inner = new InnerComplexObject() } };
否则,为了灵活起见,保持InnerJson
为string
,并使用动态查询