我使用CookComputing XML-RPC连接器从网站检索一些数据。在返回的XML中,存在可能存在或可能不存在的对象(地址)。如果存在,则将对象正确地反序列化到类中。如果它不存在则返回的对象是数组类型,而不是类。反序列化会引发有关错误类型的错误。
有人可以协助显示设置我的代码以捕获这两种情况的最佳方法吗?
XML - 地址存在(提取)
<member>
<name>address</name>
<value>
<struct>
<member>
<name>parent_id</name>
<value>
<string>15088</string>
</value>
</member>
</struct>
</value>
</member>
XML - 地址不存在(提取)
<member>
<name>address</name>
<value>
<array>
<data/>
</array>
</value>
</member>
C#构造函数
private OrderAddress _shipping_address;
public OrderAddress shipping_address
{
get { return _shipping_address; }
set { _shipping_address = value; }
}
答案 0 :(得分:1)
关于解决方案的说明:
我不得不在Visual Studio中加载CookComputing XML-RPC项目并更改有问题的方法以返回正确对象的空实例。
<强> XmlRpcDeserializer.cs 强>
private object MapArray(IEnumerator<Node> iter, Type valType,
MappingStack mappingStack, MappingAction mappingAction,
out Type mappedType)
{
mappedType = null;
// required type must be an array
if (valType != null
&& !(valType.IsArray == true
|| valType == typeof(Array)
|| valType == typeof(object)))
{
if(valType.ToString().Contains("OrderAddress")){ //change this to your mismatch
iter.MoveNext(); //moves increment on through the xml
return Activator.CreateInstance(valType); //returns empty instance of correct object
}
throw new XmlRpcTypeMismatchException(mappingStack.MappingType
+ " contains array value where "
+ XmlRpcTypeInfo.GetXmlRpcTypeString(valType)
+ " expected " + StackDump(mappingStack));
}
理论上你应该能够替换抛出并移除if
但是由于我正在处理的对象的封闭性质并希望控制以确认每个“错误”到期而保留它返回null对象。