【发布时间】:2011-05-24 21:55:07
【问题描述】:
我对@987654321@ 有同样的问题。我正在使用基于 SOAP 的 API 来回发送数据,其中响应不完全正确地遵循标准,特别是使用空值。对于DateTime,API 将返回一个空字符串,如下所示:
<nextreview></nextreview>
导致反序列化时出现以下错误:
字符串 '' 不是有效的 AllXsd 值。
所以我的想法是创建一个自定义的 Nullable 类型 NullableOrEmpty<T>,实现 IXMLSerializable 通过将空字符串转换为 null 来处理空字符串。问题是我只想处理空字符串的例外情况。我想使用“默认”行为正常序列化和反序列化的所有其他内容。如何在下面的代码中模拟序列化的默认行为?
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 的 sn-p。该错误是由birthdate 中的值引起的,因为在实际给出该值的非异常情况下我没有正确使用它:
<udf4></udf4>
<udf3></udf3>
<birthdate>1978-05-24Z</birthdate>
<lastreview></lastreview>
<fulltime>1</fulltime>
感谢任何想法或想法。如果需要,我可以发布更多代码示例或测试建议。谢谢!
【问题讨论】:
-
您不能使用相同的
XmlReader。您已经阅读过想要再次阅读的内容。
标签: .net xml serialization null