将ExecuteReader转换为XML HTTP响应

时间:2016-12-21 18:53:56

标签: c# asp.net xml asp.net-mvc asp.net-web-api

我有一个Web API,它调用存储过程,存储过程插入/更新并在数据库中选择一条记录。插入/更新有效,尝试将使用ExecuteReader读取的所选记录转换为HTTPResponseMessage

 [HttpGet]
    public  HttpResponseMessage Get(string Account)
    {
      if (string.IsNullOrEmpty(Account))
        {
          return Request.CreateResponse(new { error = "Input parameters cannot be Empty or NULL" });
        }
       string strcon = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
       SqlConnection DbConnection = new SqlConnection(strcon);
       SqlDataReader reader = null;
       DbConnection.Open();

       SqlCommand command = new SqlCommand("[dbo].[usp_InserUpadte]", DbConnection);
       command.CommandType = CommandType.StoredProcedure;

       //create type table
       DataTable table = new DataTable();
       table.Columns.Add("AccountID", typeof(string));
       table.Rows.Add(Account);

       SqlParameter parameter = command.Parameters.AddWithValue("@account_TT", table);
       parameter.SqlDbType = SqlDbType.Structured;
       parameter.TypeName = "account_TT";

       XmlReader xreader = command.ExecuteXmlReader(); 

       List<QueryResult>qresults = new List<QueryResult>();

       while (xreader.Read())
       {
           QueryResult qr = new QueryResult();
           qr.AccountID = xreader["AccountID"].ToString();
           qr.CounterSeq = xreader["CounterSeq"].ToString();

           qresults.Add(qr);
       }

我不确定如何在XML中构建Response,我创建了一个名为QueryResult的类,但我不确定是否可以在创建XML响应时使用它。

  public class QueryResult
 {
        public string AccountID { get; set; }
        public string CounterSeq { get; set; }
 }

此外,我正在尝试在执行API时在文件中编写响应。我之前已经使用过JSON和OracleDatabase,但对此并不确定。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您只需要返回qresults对象,它将自动序列化为XML(或JSON)。您可以阅读如何向QueryResult类添加属性,以便按照您希望的方式获取xml结构JSON and XML Serialization in Web API

我还建议您返回IHttpActionResult而不是建立HttpResponseMessage。然后,您只需在邮件末尾执行此操作,它将根据http ACCEPT标题自动序列化:

[HttpGet]
public IHttpActionResult Get(string Account)
{
    // rest of implementation left out for readability...    
    return Ok(qresults);
}