-1
[XmlElement(ElementName = ElementConstants.CreateDate, 
    Namespace = "http://api.facebook.com/1.0/",
    DataType = "date", Type = typeof(DateTime))]
public DateTime CreateDate { get; set; }

如果我尝试取出属性中的 DataType,我会得到:{“字符串 '1233469624' 不是有效的 AllXsd 值。”}

以下是其中一个节点值的示例:

<created>1230437805</created>

我不确定如何在此处设置 DateTime 属性才能成功反序列化。

4

2 回答 2

10

几天前我已经为你回答了这个问题。

在您的课堂上,您需要进行翻译:

static readonly DateTime epoch = new DateTime(1970, 1, 1);
static long SerializeDateTime(DateTime value)
{
    return (long)((value - epoch).TotalSeconds);
}
static DateTime DeserializeDateTime(long value)
{
    return epoch.AddSeconds(value);
}

[XmlIgnore]
public DateTime CreateDate { get; set; }

[XmlElement("created"), Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public long CreateDateInt64 {
    get {return SerializeDateTime(CreateDate);}
    set {CreateDate = DeserializeDateTime(value);}
}

等等。 TheCreateDateInt64XmlSerializer使用的版本 - 但在调用时,它会进行翻译并将值传递给(由于属性CreateDate而被忽略)。XmlSerializer

这意味着您DateTime CreateDate在类上有一个,在 xml 中有一个数字。

于 2009-02-09T15:57:20.227 回答
5

对我来说,这看起来像是一个 unix 格式的时间戳。Xml“日期”数据类型的格式非常明确:

yyyy-MM-ddTHH:mm:ss.fffffff+时区偏移

例如: 2009-02-09T10:01:23.3212345+06:00

于 2009-02-09T16:01:53.227 回答