ASP Web方法中对象的序列化

本文关键字:序列化 对象 Web 方法 ASP | 更新日期: 2023-09-27 18:24:17

我创建了一个ASP Web服务(.asmx),通过它发送带有SQL查询的请求并返回表。由于表结构是未知的,我想有一个通用模式,其中包含每个字段的列名和值,分组在一行中,然后是表对象。我的意思是要返回的xml:

<table>
  <row>
    <field>
      <colname>ID</colname>
      <value>32</value>
    </field>
    <field>
      ...
    </field>
  </row>
  <row>
     ...
  </row>
</table>

为此,我创建了一个表对象、一个行对象和一个字段对象,如下所示:

public class Table
{
    public Table()
    {
        Rows = new List<Row>();
    }
    public List<Row> Rows { get; set; }
}
public class Row
{
    public Row()
    {
        Fields = new List<Field>();
    }
    public List<Field> Fields { get; set; }
}
public class Field
{
    public string Name { get; set; }
    public string Value { get; set; }
}

然后我创建了这些方法,这些方法从DB中检索数据,并将它们映射到表对象,然后返回到web方法,web方法会自动序列化它并输出如下的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<Table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...>
  <Rows>
    <Row>
      <Fields>
        <Field>
          <Name>ID</Name>
          <Value>23</Value>
        </Field>
        <Field>
          ...
        </Field>
      </Fields>
    </Row>
    <Row>
      ...
    </Row>
  </Rows>
</Table>

然而,问题是,我没有得到所需结构的输出,也没有得到不需要的变量名,比如标签"Rows"answers"Fields"。我还尝试过只使用table对象,不使用Row对象,而是直接使用List<List<Field>>,但输出结构是<Table><Row><ArrayOfFields><Field>...

那么,总之,我应该如何创建一个DTO,在本例中是Table对象,以便xml输出如开头所示,<Table><Row><Field>...?我希望我的问题有点清楚。提前谢谢。

ASP Web方法中对象的序列化

要做到这一点,您需要将自定义序列化属性应用于类和属性

例如

[System.Xml.Serialization.XmlRoot(ElementName = "table")]        
public class Table
{
    [System.Xml.Serialization.XmlElement("row")]
    public Row[] Rows;
}
public class Row
{
    public string V;
}

这将删除多余的元素。您可以在System.Xml.Serialization命名空间下查找以解决其他问题。