我正在设计VB.net中的一些复杂类(但您可以在C#中编写您的答案,如果您愿意:P),其中包含必须从XML加载的数据。当然,显而易见的解决方案是设计一个可序列化的类,以便自动化加载过程。是否可以在.net中执行“混合”XML序列化?
现在,我的问题如下:XML结构是固定的,我不能改变它,它有一些令人讨厌的序列化。下面是一小片的DTD,更好地说明问题的例子:
<!ELEMENT Relationship (AttributePairs | AscendCaption | DescendCaption | ErrPreventInsertOrUpdateChild | ErrPreventDeleteParent | ErrPreventUpdateParent |ExtendedProperties |HiddenProperties)* >
<!ATTLIST Relationship
CountAggregates CDATA #IMPLIED
CountReplicates CDATA #IMPLIED
OnParentUpdate (PreventIfChildren|UpdateChildren) #IMPLIED
OnParentDelete (PreventIfChildren|DeleteChildren|NullChildrenForeignKey) #IMPLIED
IsEnforce (True|False) #REQUIRED
OnChildInsertOrUpdate (PreventIfNoParent|InsertParentIfNone) #IMPLIED
ChildRoleName CDATA #IMPLIED
ParentRoleName CDATA #IMPLIED
ParentAttributeGroupInstance CDATA #IMPLIED
ChildAttributeGroupInstance CDATA #IMPLIED
>
<!--Lots of other sutff not needed for this example -->
正如你可以看到,上述所有属性可以很容易地通过刚刚宣布了相应的属性,并与<XmlAttribute()>
标签装饰它序列化。 不测:
IsEnforce(TRUE | FALSE)#REQUIRED
由于真假不在XML(由于资本T与F)与序列化进程将无法有效的布尔值。
现在...我知道的唯一的其他选择是手动实现IXMLSerializable,这是我为其他类所做的工作,但它也意味着我必须手动读取每个属性/元素,即使是那些我可以轻松地用标签自动序列化的。
所以,最后,我的问题:是否有可能混合这两种方法?即:自动序列化与标签,然后“步入”手动读取更“棘手”的价值观? (布尔只是一个例子,假设我想手动读取随意某些属性)bool
型
可能欺骗所以,你必须与非法值的XML DTD? – StingyJack 2010-11-09 21:20:43
XML非常严格。如果你是“xml”需要无效的xml,那么它不是xml ...所以你可能会想要一个预处理器来处理这些问题,并保持你的* actual * XML操作很简单 – STW 2010-11-09 21:26:16
@StingyJack:nope,in DTD你可以做你想做的事,那个DTD的设计者(我没有设计它)决定使用True和False。但是在.NET中用于序列化的XSchema标准更加严格,只允许“真”和“假”作为有效的布尔值。 这里的问题是我已经有了XML,并且它本身不是“不正确的”......关键是我必须适应它以满足我的需求,并且在类中我需要一个布尔值,所以我必须以某种方式阅读它作为布尔值,即使对于DTD它只是一个枚举属性 – 2010-11-09 21:30:24