将强类型对象转换为匿名对象

时间:2015-09-14 16:58:51

标签: c# serialization asp.net-web-api2

我正在开展一个相对较大的项目,我们试图在可能的情况下暗示面向服务的架构,但由于这一事实,我今天遇到了以下问题。   在我的表示层(ASP.NET Web Forms)中,我有一个User对象:

public class User
{
  public int ID {get; set;}
  public string Name {get; set;}
  public string Email {get; set;}
  Public string State {get; set;}
  public DateTime CreatedOn {get; set;}
  public string CreatedBy {get; set;}
}

原始项目中还有一些字段,但对于这种情况,我认为这并不重要。   因此,在表示层中,我使用此对象在页面上显示用户信息,并让使用该应用程序的人员执行CRUD操作。   问题是我想创建一个新用户。有单独的Web Api 2服务项目 - 新创建的用户的“UserService so all calls are made to the dedicated action from the UserService project and the response is the ID”以及创建用户的初始状态。   因此,要创建一个新用户,我会这样做:

    public User InsertUser(string username, string email, string createdBy)
    {
        var user = new
        {
            Username = username,
            Email = email,
            CreatedBy = createdBy
        }

        var result = //make call to the user service passing the anonymous object

        user newUser = new User
        {
            ID = result.ID,
            Username = username,
            Email = email,
            CreatedBy = createdBy,
            State = result.State
        }
        return newUser;
    }

由于某些原因在不久的将来无法解决,我无法引用某些DTO对象,并且该服务期望来自同一类型的对象或匿名对象,或者它不能反序列化数据。在这里有两件事让我感到困扰 - 第一件事是我创建了两次实际的事情,理想情况下应该只是User类型的一个对象,在执行服务后我可以添加IDState就像这样:

newUser.Id = result.Id
newUser.State = result.State

相反,我创造了两个远非理想的对象。其次,我认为可能的一件事是从表示层创建User的实例,但以某种方式转换它,以便服务操作能够反序列化它。这似乎是相当标准的情况,不包括我不能引用.dll或其他东西的事实......但是,也许还有另一个我不知道的问题的解决方案?

EDIT 在Web Api部分,方法是这样的:

public HttpResponseMessage InsertUser([FromBody]UserDTO userToInsert)
{
    var user = userToInsert;
    //Call Stored Procedure to Insert the user
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new {UserId = user.Id, State = user.State});
    return response;
}

在我的客户端中我只是为了让它工作而调用这个方法我有一个嵌套类:

public class UserDetails
{
  public int UserId {get; set;}
  public string State {get; set;}
}

1 个答案:

答案 0 :(得分:1)

您是否已查看序列化为JSON,然后反序列化为匿名类型对象?看看JSON.NET(http://www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm