C# 对于RESTful服务,用XML表示列表以便更容易反序列化的最佳方法是什么

C# 对于RESTful服务,用XML表示列表以便更容易反序列化的最佳方法是什么,c#,java,xml,rest,C#,Java,Xml,Rest,我使用两种编程语言:Java和C,这两种语言通过RESTful服务进行通信。在Java中,我发送了一些XML来请求C#程序发出的请求,GET的响应包括一些列表结构 <X> <A>[3, 18, 11, 8, 19, 6]</A> </X> <X> <A>[3, 18, 11, 8, 19, 6]</A> </X> [3, 18, 11, 8, 19, 6] [3, 18, 11,

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

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

[3, 18, 11, 8, 19, 6]
[3, 18, 11, 8, 19, 6]
我很难将字符串解析回列表中,虽然不是很难,但是非常手动。我所做的是:

    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);
        }
    }
公共路由结果(字符串A)
{
A=A.替换(“[”,”);
A=A.替换(“]”,替换为“);
A=A.替换(“,”);
String[]As=A.Split(新字符串[]{“,”},StringSplitOptions.RemoveEmptyEntries);
this.A=新列表();
foreach(As中的字符串ax)
{
本.As.Add(ax);
}
}
我觉得上面的代码很有趣,你不这么认为吗?如果有一天有人侵入我的电脑,知道我必须用这种方式编写代码,我会感到很尴尬。哈哈

所以我的问题是,特别是对于那些熟悉RESTful、REST世界和XML的人来说,任何东西都是技术的一部分;在XML for REST中表示列表的理想方法是什么,以后反序列化也是理想的方法。请给出某些代码作为示例,无论是用C#xor还是Java

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

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

3.
18
11
8.
19
6.

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

老实说,我不会说原始代码有太多错误。它做的工作,它只是几行,它是如何做到这一点很清楚。您可以将最后一位更改为:

this.A = new List<string>(As);
this.A=新列表(As);
…因为
列表的构造函数能够将数组作为输入并自动填充自身


您还可以考虑将其作为JSON数组发送,这类似于JSON数组,并且不会涉及很多额外的XML标记。请参阅。

为什么不使用XmlSerializer并让它完成所有工作?是的。你的意思是将数据解析成类?我确实使用XmlSerializer对其进行反序列化,并且可以返回“列表”[3,18,11,8,19,6]。但我发现将其转换回C#的列表就像是容易出错的代码。我将研究XElement man。@AdamPahleviBaihaqi当然你可以使用它,但如果可以,最好让序列化程序为你做。字符串输入=“[3,18,11,8,19,6]”;List number=Regex.Matches(输入@“\d+”).Cast()。选择(m=>int.Parse(m.Value)).ToList()@还可以看到这个var list=JsonConvert.DeserializeObject(输入);哦,我明白了。酷。我只是觉得这很容易出错,因为如果将来我的列表中包含一个空格,那么所有内容都将被破坏,没有人能够轻易地知道bug在哪里。或者,如果某个空格不应该被替换()。任何空格都将被替换方法捕获,因此不必担心。您可以更改
A
字段/属性,使其类型为
List
,然后使用
int.TryParse
将字符串解析为int。这样可以处理格式错误的输入。然后,您还可以进行范围检查,以确保它们是合理的值:>0,等等。如果您使用该方法中的JSON解析器,那么该方法中仍然会引发任何异常/错误,因此您不会在定位错误方面获得/丢失任何东西。