C# 编写具有动态响应的C SDK并将其转换为模型
比如, 我有一个叫做User的类C# 编写具有动态响应的C SDK并将其转换为模型,c#,asp.net,serialization,sdk,json.net,C#,Asp.net,Serialization,Sdk,Json.net,比如, 我有一个叫做User的类 public class User { public string Name { get; set; } public List<Job> Jobs { get; set; } } 太好了!现在,让我们用查询字符串做一些有趣的事情,并展开作业列表 GET: api.com/users/123?$expand=Jobs RESPONSE: { name : "Erik", jobs : [ {
public class User
{
public string Name { get; set; }
public List<Job> Jobs { get; set; }
}
太好了!现在,让我们用查询字符串做一些有趣的事情,并展开作业列表
GET: api.com/users/123?$expand=Jobs
RESPONSE:
{
name : "Erik",
jobs : [
{
id : 1,
name : "My Job",
address : "1515 My Street Rd. 20144, VA"
},
{
id : 2,
name : "My Job 2",
address : "9595 My Street Rd. 20144, VA"
}
]
}
但是呃哦。。。我们无法使用原始用户类。这是因为工作模式是这样的
public class Job
{
public int Id { get; set; }
}
public class JobExpanded : Job
{
public string Name { get; set; }
public string Address { get; set; }
}
因此,JSON序列化程序自然不知道如何转换其扩展响应
我有什么选择
我可以重写用户类中的Jobs属性吗?喜欢
public class UserWithExpandingJobs : User
{
public List<JobExpanded> Jobs { get; set; }
}
这一切都让我头疼!这似乎太冗长了
有没有人能指导我,让我知道我应该如何思考或尝试去做,以最大限度地减少SDK的占用空间
哦,顺便说一句。。。它不允许我覆盖作业,因为它是另一种类型。想法?您可以使用new来引入同名的新成员,但它不会也不应该覆盖现有成员。然而,我们并不清楚您希望如何使用这些代码。如果您真的觉得额外的10行代码太冗长,为什么不对所有内容都使用dynamic呢?根本不必声明类型……那么您的API将返回要在响应中序列化的强类型.NET对象?返回泛型对象将允许序列化程序在同一端点处理不同的对象结构。@JonSkeet-我担心的是我必须创建两个新对象。用户具有展开作业和已展开作业。有没有更干净的方法可以做到这一点?@Erik5388:就信息量而言,您有不同的数据类型。您可以只使用展开的类型,在没有展开的视图时返回一个没有那么多信息的版本。。。
public class JobExpanded : Job
{
public string Name { get; set; }
public string Address { get; set; }
}