首先,这是不是索引或查询的日期时间值,如blog post盖。DocumentDb日期时间反序列化错误
这是关于反序列化嵌套复杂的对象,其中一人有一个DateTime属性文档时,从.NET SDK得到一个错误。
文档的结构是这样的:
class AccountBase : Document
{
... // omitted for brevity
}
class Account : AccountBase
{
[JsonProperty(PropertyName = "calendar")]
public Calendar Calendar { get; set; }
}
class Calendar
{
[JsonProperty(PropertyName = "entries")]
public List<Entry> Entries{ get; set; }
}
class Entry
{
[JsonProperty(PropertyName = "entryDate")]
public DateEpoch EntryDate { get; set; }
}
class DateEpoch
{
[JsonProperty(PropertyName = "date")]
public DateTime Date { get; set; }
[JsonProperty(PropertyName = "epoch")]
public int Epoch
{
get
{
return (this.Date.Equals(null) || this.Date.Equals(DateTime.MinValue))
? int.MinValue
: this.Date.ToEpoch();
}
}
}
扩展:
public static int ToEpoch(this DateTime date)
{
if (date == null) return int.MinValue;
DateTime epoch = new DateTime(1970, 1, 1);
TimeSpan epochTimeSpan = date - epoch;
return (int)epochTimeSpan.TotalSeconds;
}
,并试图从Azure中的JsonReaderException得到这个文档时抛出:
读取错误日期。意外的令牌:StartObject。路径“calendar.entries [0] .entryDate”,1号线,868
我一直用这个DateEpoch对象多前地方没有问题,什么那么位置。 我第一次以为this可能是相关的,但现在我没有真正的线索。
是否有任何人认识到这个问题?
编辑:请求
的数据,和它看起来像这样在Azure中浏览:
"calendar": {
... // omitted for brevity
"entries": [
{
... // omitted for brevity
"entryDate": {
"date": "2015-11-03T01:32:30.0600636Z",
"epoch": 1446514350
}
}
]
}
11月25日编辑: 好吧,这仍是困扰我。
我想这样做像瑞安CrawCour的例子,但因为它是一个管理哈希分区分贝,我不能那样做。数据库根据托管哈希分区数据块上的文档数据库教程进行初始化。
所以,以下类型的请求,可以做到:
public void DeserializeAccount()
{
using (_client)
{
var state = new AccountState(Guid.NewGuid());
var account = new Account(state)
{
Calendar = new Calendar
{
Entries = new List<Entry>
{
new Entry(Guid.NewGuid(), DateTime.UtcNow)
}
}
};
var doc = _client.CreateDocumentAsync(_database.SelfLink, account).Result;
foreach (Account acc in _client.CreateDocumentQuery<Account>(_database.SelfLink)
.Where(d => d.Id == doc.Resource.Id)
.AsEnumerable())
{
System.Diagnostics.Debug.WriteLine(acc.ToString());
};
}
}
仍然得到同样的错误信息:
读取错误的日期。意外的令牌:StartObject。路径 'calendar.entries [0] .entryDate',line 1,position 541.
邮政*数据*导致问题。很可能数据的形状与你的对象不一样,'epoch'与它无关('Unexpected token:StartObject') –
你的JSON是什么样的?它会出现JSON与您的数据模型不匹配,看起来像'{“date”:{...}}'。 – dbc
我更新了JSON。尽管在试图检索它之前几秒钟它就被输入了相同的模型,所以我的代码中没有任何东西会改变,这会阻碍序列化。 –