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>...
?我希望我的问题有点清楚。提前谢谢。
要做到这一点,您需要将自定义序列化属性应用于类和属性
例如
[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命名空间下查找以解决其他问题。