对于RESTful服务,用XML表示List的最佳方式是什么,以便更容易进行反序列化



我使用两种编程语言:Java和C#,这两种语言通过RESTful服务进行通信。在Java中,我为C#程序发出的请求发送了一些XML,GET的响应包括一些列表结构。

<X>
    <A>[3, 18, 11, 8, 19, 6]</A>
</X>
<X>
    <A>[3, 18, 11, 8, 19, 6]</A>
</X>

我很难将字符串解析回列表中,虽然不是很难,但非常手动。我所做的是:

    public RoutingResults(String A) 
    {
        A = A.Replace("[", "");
        A = A.Replace("]", "");
        A = A.Replace(" ", "");
        String[] As = A.Split(new String[] {","}, StringSplitOptions.RemoveEmptyEntries);
        this.A = new List<string>();
        foreach (String ax in As)
        {
            this.As.Add(ax);
        }
    }

我觉得上面的代码很有趣,你不这么认为吗?如果有一天有人侵入我的电脑,知道我必须用这种方式编码,我会感到很尴尬。哈哈。

所以我的问题是,尤其是对于那些对RESTful、REST世界和XML有经验的人来说,任何技术都在这一部分;在REST的XML中表示列表的理想方式是什么,以后反序列化也是理想的。请给出一些代码来举例说明,无论是在C#还是Java中。

如果我必须发送这样的回复:

 <X>
      <A>
          <as>3</as>
          <as>18</as>
          <as>11</as>
          <as>8</as>
          <as>19</as>
          <as>6</as>
      <A>
 </X>

我认为发送类似上述格式的数据会对性能造成影响;相比之下,如果数据格式整齐,只是典型java.util.List的.toString表示。你不这么认为吗?

老实说,我不会说原始代码有太多错误。它完成了任务,只有几行,而且它是如何完成的很清楚。你可以把最后一位改为:

this.A = new List<string>(As);

因为CCD_ 1的构造函数能够将数组作为输入并自动填充自身。

您还可以考虑将其作为JSON数组发送,这将是类似的,并且不会涉及大量额外的XML标记。请参阅将json字符串中的数组转换为列表。

相关内容

最新更新