Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写具有动态响应的C SDK并将其转换为模型_C#_Asp.net_Serialization_Sdk_Json.net - Fatal编程技术网

C# 编写具有动态响应的C SDK并将其转换为模型

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 : [ {

比如,

我有一个叫做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 : [ 
        { 
            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; }
}