我可以在不使用C#代码之前定义字段的情况下使用JSON吗?

时间:2015-03-13 14:19:53

标签: c# asp.net json

我正在使用带有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中。这样我们就不必触摸已编写,经过测试和运行的代码。新领域只是通过整个过程。

可以这样做吗?如果是的话,有关于如何的任何建议?

1 个答案:

答案 0 :(得分:1)

如果您使用JSON.NET来处理对象的反序列化,那么它就支持动态属性。一旦您读取了JSON字符串,就可以将它转换为JArray或JObject,然后使用.Children()调用获取所有属性的列表,将其转换为您需要的任何XML对象。

看看这里: Deserialize json object into dynamic object using Json.net