0

我正在研究一种“新语言”(不是那么雄心勃勃)XML 定义,我希望可以选择同时通过 xml(序列化/反序列化)和 API 使用对象图。

public class Project
{
    public List<Connection> Connections  { get; set; }
    public List<Table> Tables { get; set; }

   /* Constructors and more.... */
}

public class Connection
{
    public string Name { get; set; }
    public string ConnectionString { get; set; }

    /* Constructors and more.... */
 }

public class Table
{
    public string TableName { get; set; }
    public Connection Conn { get; set; }
    /* Constructors and more.... */
}

好的,现在我想用以下方式序列化/反序列化它:

<Project>
 <Connections>
   <Connection Name="MyConnName" ConnectionString="My connection string"\>
 <\Connections>
 <Tables>
   <Table TableName="MyTable" ConnectionName="MyConnName"\>
 <\Tables>
<\Project>

这里有两个问题:

  1. 该类有一个“Conn”属性,它是对连接类的引用,但在“语言”(Xml 序列化)中重命名为“ConnectionName”(我想更改名称以避免纯对象引用(类)和语言“按名称引用”(Xml 序列化)

  2. 如您所见,我想保留参考,但不包括“z.id ??” 就像 DataContractSerializer 在 preserveObjectReference 设置为 true 时所做的那样,我想使用“名称”(更易于阅读)

有任何想法吗?

4

1 回答 1

0

对于“你想要的”几乎任何有用的价值,真的没有很好的方法可以扩展XmlSerializer做你想做的事。

要生成您正在寻找的那种 XML,您必须使用 来装饰Connection属性[XmlIgnore],添加一个ConnectionName供 XmlSerializer 使用的属性,并ConnectionConnectionName设置时或之后的某个时间找到合适的位置。

或者,您需要Table实现IXmlSerializable完全手动实现生成<Table>元素的代码。

于 2011-09-13T00:25:23.397 回答