我正在使用Microsoft创建一个具有以下要求的服务:
需求1和2只需定义我的输入。我开始使用内置的System.Xml.Serialization.XmlSerializer类来开发我的解决方案,但不得不放弃它,因为它无法处理需求#3。
或者,我找到了YAXLib,它提供了一个非常适合处理需求#3的有用方式。
YAXLib还处理需求#4,但只能使用XML中的自定义属性:
<ListOfObjects>
<Object yaxlib:realtype="System.Int32">7</Object>
<Object yaxlib:realtype="System.Double">3.14</Object>
<Object yaxlib:realtype="System.String">Congrats</Object>
<Object yaxlib:realtype="System.StringSplitOptions">RemoveEmptyEntries</Object>
</ListOfObjects>由于需求2,我不能使用这种方法。我需要一些类似于System.Xml.Serialization.XmlElementAttribute的东西,这样我就可以在代码中而不是在数据中指示序列化程序。有一个现有的解决方案来处理所有这些需求吗?
示例:
输入
<DEALS>
<DEAL>
<COLLATERALS>
<COLLATERAL>xyz</COLLATERAL>
<COLLATERAL>1.2</COLLATERAL>
<COLLATERAL>4.5</COLLATERAL>
</COLLATERALS>
<LOANS>
<LOAN>
<CLOSING_INFORMATION />
</LOAN>
</LOANS>
</DEAL>
</DEALS>C#类
public class DEAL
{
[System.Xml.Serialization.XmlElementAttribute("COLLATERALS", typeof(COLLATERALS))]
[System.Xml.Serialization.XmlElementAttribute("LOANS", typeof(LOANS))]
[YAXCollection(YAXCollectionSerializationTypes.RecursiveWithNoContainingElement)]
public object[] Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
// Remaining implementation details omitted..
}
public class COLLATERALS { /* details omitted.. */ }
public class LOANS { /* details omitted.. */ }
public class COLLATERAL
{
[System.Xml.Serialization.XmlTextAttribute()]
public decimal Value { get; set; }
}预期输出
DEALS类的Item集合中的对象应该反序列化为各自的类型:COLLATERALS和LOANS。此外,值'xyz‘的第一个担保品不会反序列化(因为类型是decimal),但是剩余的有效COLLATERAL项将被反序列化。应该以某种方式记录将“xyz”解析为“十进制”的错误。
发布于 2012-12-04 20:09:14
您可以使用( XSD文件)来定义XML文件的有效格式。现有的工具将验证特定文件是否符合架构。
通过公开提供此模式,您将能够允许客户端验证自己的请求,而无需实际与web服务交互。这将使他们能够看到他们的投入是否有效,如果他们需要对具体需要修改的内容进行复杂的分析以符合要求,他们将能够自己做到这一点。
https://stackoverflow.com/questions/13688489
复制相似问题