我正在研究一种“新语言”(不是那种雄心勃勃的)XML定义,我希望能够同时使用对象图víaxml(序列化/反序列化)和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>
这里有两个问题:
该类有一个“Conn”属性,它是对连接类的引用,但在“语言”(Xml序列化)中重命名为“ConnectionName”(我想更改名称,避免纯粹之间的混淆)对象引用(类)和语言“按名称引用”(Xml seralization)
如您所见,我想保留引用,但不包括“z.id ??”就像DataContractSerializer在preserveObjectReference设置为true时所做的那样,我想使用“名字”(更加人性化)
有什么想法吗?
答案 0 :(得分:0)
实际上没有什么好方法可以扩展XmlSerializer
来做你想要的事情,几乎任何有用的“你想要的”价值。
要生成您正在寻找的XML类型,您必须使用Connection
修饰[XmlIgnore]
属性,为XmlSerializer添加ConnectionName
属性以供使用,以及在Connection
设置或之后的某个时间找到相应的ConnectionName
。
或者,您需要Table
实施IXmlSerializable
并完全手工实施生成<Table>
元素的代码。