如何为抽象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文档(任意类型)。

Requeststring代替InnerJson好吗?

有什么好的方法来设计Request类吗?

如何为抽象json文档设计类

如果您要使用强类型模型,我建议使用工厂模型。为了演示:

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() } };

否则,为了灵活起见,保持InnerJsonstring,并使用动态查询