我有一个由许多不同属性组成的大对象。我用四种不同的函数操作这个对象。每个函数都返回该对象。这是我的设置的一个非常简短的版本:
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
}
所以问题是,当我返回我的对象时,我只想在返回时提供某些属性。好像我正在返回一个仅为此目的而动态创建的自定义对象。
我有什么选择来实现这个目标?
答案 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时将跳过该属性。因此,一种可能的解决方案是使用可空属性。