我正在使用带有C#和ASP.NET的Visual Studio 2013为项目开发REST API,我需要一些指导。
当网页执行POST时,我将作为JSON对象传递给许多字段。通过在我的C#代码中定义数据传输对象,我可以轻松地从JSON中读取值,但前提是我定义了所有字段(具有相同的名称)。
这是我当前(工作)的代码:
public class AgencyPostDTO
{
public string AgencyName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZIP { get; set; }
}
// POST: api/Agency
public string Post(AgencyPostDTO Agency)
{
int success;
success = SQLUpdateAgency(Agency);
if (success < 1)
{
return "Failed";
}
else
{
return "Success";
}
}
到目前为止没有问题。我需要将数据传递给第二个函数,在那里我将执行一些数据处理(包括将数据转换为XML)并使用存储过程将数据/ XML发送到MS SQL:
public int SQLUpdateAgency(AgencyPostDTO Agency)
{
string xml = Agency.SerializeObject();
... code to call SQL stored procedure ommitted here
}
现在我的问题。我更喜欢如果我不必在代码中定义数据传输对象AgencyPostDTO的参数,而代码只是读取传入的JSON并将其传递给下一个函数,在那里我创建包含传递的所有内容的XML 。 由于它现在有效,如果JSON包含例如电子邮件地址字段,除非我在AgencyPostDTO中定义它,否则它将被删除。
那么我为什么要这样做呢?为了将来的易维护性。用户可能会说他们想要在Web表单中添加其他字段。然后我可以让我们的SQL专家将该列添加到表中,给我它的名称,然后在HTML表单中添加一个输入字段,并确保它包含在发送过的JSON中。这样我们就不必触摸已编写,经过测试和运行的代码。新领域只是通过整个过程。
可以这样做吗?如果是的话,有关于如何的任何建议?
答案 0 :(得分:1)
如果您使用JSON.NET来处理对象的反序列化,那么它就支持动态属性。一旦您读取了JSON字符串,就可以将它转换为JArray或JObject,然后使用.Children()调用获取所有属性的列表,将其转换为您需要的任何XML对象。
看看这里: Deserialize json object into dynamic object using Json.net