仅返回大对象的某些属性?

时间:2013-04-11 19:24:22

标签: c# json asp.net-web-api

我有一个由许多不同属性组成的大对象。我用四种不同的函数操作这个对象。每个函数都返回该对象。这是我的设置的一个非常简短的版本:

public class myproject
{
    //many attributes
}

public myproject FunctionOne()
{
    //do some logic.
    //return myproject but only properties 4,5,6
}
public myproject FunctionTwo()
{
    //do some logic.
    //return myproject but only properties 1,2,3
}
public myproject FunctionThree()
{
    //do some logic.
    //return myproject but only properties 1,4,7
}
public myproject FunctionFour()
{
    //do some logic.
    //return myproject but only properties 3,2,5
}

所以问题是,当我返回我的对象​​时,我只想在返回时提供某些属性。好像我正在返回一个仅为此目的而动态创建的自定义对象。

我有什么选择来实现这个目标?

3 个答案:

答案 0 :(得分:2)

如果您正在使用REST并返回JSON,那么您可以执行以下操作:

WebApi电话:

public HttpResponseMessage GetOne()
{
    return this.Request.CreateResponse(
        HttpStatusCode.OK,
        FunctionOne());
}
public HttpResponseMessage GetTwo()
{
    return this.Request.CreateResponse(
        HttpStatusCode.OK,
        FunctionTwo());
}

逻辑:

public dynamic FunctionOne()
{
    //do some logic.
    //return myproject but only properties 4,5,6
    return new {property4 = "abc", property5 = "xyz", property6 = "123"};
}
public dynamic FunctionTwo()
{
    //do some logic.
    //return myproject but only properties 1,2,3
    return new { property1 = "asdf", property2 = "123", property3 = "aaa" };
}

答案 1 :(得分:1)

如果您可以控制使用此对象的代码,则可以取消您提到的属性(可能是属性?),并将其替换为包含属性名称/值对的Dictionary

然后,只需在构造函数时使用所需的值填充它。

答案 2 :(得分:0)

如果属性具有Null值,则在将对象序列化为Json时将跳过该属性。因此,一种可能的解决方案是使用可空属性。