我可以帮您将XML反序列化为以下类:
```
我接下来会配置我的覆盖文件:
这会导致以下异常:
```
我想将XML反序列化为以下类:
```public partial class Delivery
{
public System.Nullable<System.DateTime> sentDate { get; set; }
public System.Nullable<System.DateTime> receivedDate { get; set; }
public System.Nullable<System.DateTime> responseDueDate { get; set; }
}
然而,XML中的日期不符合XmlSerializer友好的格式。基于多个问题的答案,我添加了这个类:
public partial class DateSafeDelivery : Delivery
{
[XmlElement("sentDate")]
public string sentDateString
{
internal get { return sentDate.HasValue ? XmlConvert.ToString(sentDate.Value) : null; }
set { sentDate = DateTime.Parse(value); }
}
[XmlElement("receivedDate")]
public string receivedDateString
{
internal get { return receivedDate.HasValue ? XmlConvert.ToString(receivedDate.Value) : null; }
set { receivedDate = DateTime.Parse(value); }
}
[XmlElement("responseDueDate")]
public string responseDueDateString
{
internal get { return responseDueDate.HasValue ? XmlConvert.ToString(responseDueDate.Value) : null; }
set { responseDueDate = DateTime.Parse(value); }
}
}
我接下来会配置我的覆盖文件:
private static XmlAttributeOverrides GetOverrides()
{
var overrides = new XmlAttributeOverrides();
var attributes = new XmlAttributes();
attributes.XmlElements.Add(new XmlElementAttribute(typeof(DateSafeDelivery)));
overrides.Add(typeof(MyParent), "Delivery", attributes);
var ignore = new XmlAttributes { XmlIgnore = true };
overrides.Add(typeof(DateTime?), ignore);
return overrides;
}
这会导致以下异常:
Message=The string '2010-06-12T00:00:00 -05:00' is not a valid AllXsd value.
Source=System.Xml.ReaderWriter
StackTrace:
at System.Xml.Schema.XsdDateTime..ctor(String text, XsdDateTimeFlags kinds)
at System.Xml.XmlConvert.ToDateTime(String s, XmlDateTimeSerializationMode dateTimeOption)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderDeserializedAudit.Read1_NullableOfDateTime(Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderDeserializedAudit.Read15_DateSafeDelivery(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderDeserializedAudit.Read16_MyParent(Boolean isNullable, Boolean checkType)
正在使用DateSafeDelivery
,但是日期的XmlIgnore
被忽略了。
如果我切换为:
overrides.Add(typeof(DateTime?), ignore);
使用:
new Dictionary<string, Type>()
{
{ "sentDate", typeof(Delivery) },
{ "receivedDate", typeof(Delivery) },
{ "responseDueDate", typeof(Delivery) },
}
.ToList()
.ForEach(t1 => overrides.Add(t1.Value, t1.Key, ignore));
对于一个类和三个属性来说,这样做是可以的。但我有14个类,总共有三打日期属性。我知道我必须为这14个类添加覆盖,但是否有一种方法可以让序列化程序忽略所有DateTime
属性?
我以为XmlAttributeOverrides.Add 方法 (Type, XmlAttributes)可以实现这一点。但它并没有起作用。为什么?这个方法是干什么的?它是做什么用的?