关于这个问题,我有同样的问题。我正在使用基于 SOAP 的 API 来回发送数据,其中响应不完全正确地遵循标准,特别是使用空值。对于DateTime
,API 将返回一个空字符串,如下所示:
<nextreview></nextreview>
这导致反序列化时发生以下错误:
字符串 '' 不是有效的 AllXsd 值。
所以我的想法是创建一个自定义的 Nullable 类型,通过将其转换为 null 来NullableOrEmpty<T>
实现IXMLSerializable
处理空字符串。问题是我只想处理空字符串的例外情况。我想使用“默认”行为正常序列化和反序列化的所有其他内容。如何在下面的代码中模拟序列化的默认行为?
public class NullableOrEmpty<T> : IXmlSerializable
where T : struct
{
public T? NullableValue { get; set; }
public T Value { get { return this.NullableValue.Value; } }
public bool HasValue { get { return this.NullableValue.HasValue; } }
...
public void ReadXml(XmlReader reader)
{
string xml = reader.ReadElementContentAsString();
if (string.IsNullOrEmpty(xml))
{
this.NullableValue = null;
}
else
{
//THIS SHOULD DO THE DEFAULT. THIS DOESN'T WORK. WHAT DO I DO??
//this.NullableValue = (T?)new XmlSerializer(typeof(T?)).Deserialize(reader);
}
}
public void WriteXml(XmlWriter writer)
{
//THIS SHOULD DO THE DEFAULT. THIS DOESN'T WORK. WHAT DO I DO??
//new XmlSerializer(typeof(T?)).Serialize(writer, this.NullableValue);
}
}
当我说“这不起作用”时,它专门生成以下错误消息,可能是因为它试图消耗不存在的东西:
XML 文档中存在错误 (63, 6)。
<lastreview xmlns=''>
没想到。
这是该位置的 XML 片段。该错误是由 中的值引起的birthdate
,因为在实际给出该值的非异常情况下,我没有正确使用它:
<udf4></udf4>
<udf3></udf3>
<birthdate>1978-05-24Z</birthdate>
<lastreview></lastreview>
<fulltime>1</fulltime>
任何想法或想法表示赞赏。如果需要,我可以发布更多代码示例或测试建议。谢谢!