我有一個Azure移動應用程序服務,並且PullAsync
正在悄悄失敗。Azure移動服務:表序列化
在後端,DTO的是這樣的:
type TablesDto() =
[<JsonProperty("id")>] member val Id = String.Empty with get, set
[<JsonProperty("deleted")>] member val Deleted = false with get, set
[<JsonProperty("createdAt")>] member val CreatedAt = Nullable<DateTimeOffset>() with get, set
[<JsonProperty("updatedAt")>] member val UpdatedAt = Nullable<DateTimeOffset>() with get, set
[<JsonProperty("version")>] member val Version = [||] with get, set
interface ITableData with
member this.Id with get() = this.Id and set(value) = this.Id <- value
member this.Deleted with get() = this.Deleted and set(value) = this.Deleted <- value
member this.CreatedAt with get() = this.CreatedAt and set(value) = this.CreatedAt <- value
member this.UpdatedAt with get() = this.CreatedAt and set(value) = this.UpdatedAt <- value
member this.Version with get() = this.Version and set(value) = this.Version <- value
type MyEntityDto() =
inherit TablesDto()
[<JsonProperty("entityName")>] member val EntityName = String.Empty with get, set
我使用的是DomainManager
從我的數據庫架構對象映射到這個DTO形式,但我不知道這是相關的。
在前端(在Xamarin Android應用)時,DTO被定義爲
type MyEntityDto() =
[<JsonProperty("id")>] member val Id = String.Empty with get, set
[<JsonProperty("version"); AzureVersion>] member val Version = Unchecked.defaultof<String> with get, set
[<JsonProperty("createdAt")>] member val CreatedUtc = DateTime.MinValue with get, set
[<JsonProperty("updatedAt")>] member val UpdatedUtc = DateTime.MinValue with get, set
[<JsonProperty("entityName")>] member val EntityName = String.Empty with get, set
出於調試目的,我已經使用了下列處理程序來檢查從服務器回來的JSON:
#if DEBUG
type DebuggingHandler() =
inherit DelegatingHandler()
let deserialise content =
try
let deserialised = JsonConvert.DeserializeObject<MyEntitypDto[]>(content)
deserialised |> ignore
with
| ex ->
ex |> ignore
override this.SendAsync(message, cancellationToken) =
let sendAsync = base.SendAsync(message, cancellationToken)
async {
let! response = sendAsync |> Async.AwaitTask
let! content = response.Content.ReadAsStringAsync() |> Async.AwaitTask
deserialise content
return response
} |> Async.StartAsTask
#endif
檢查在調試器中content
值顯示這一點:
[{"[email protected]":"Harry","[email protected]":"2","[email protected]":true,"[email protected]":"2017-04-26T11:20:46.83Z","[email protected]":"2017-04-26T11:20:46.83Z","[email protected]":"AAAAAAAAO/Y="},
{"[email protected]":"Gary","[email protected]":"3","[email protected]":false,"[email protected]":"2017-04-26T11:23:05.16Z","[email protected]":"2017-04-26T11:23:05.16Z","[email protected]":"AAAAAAAAO/c="}]
這個「@」符號後綴是怎麼回事?它可以防止對象在調試器中解串行,我懷疑這就是爲什麼PullAsync
方法正在回收。
這是F#的一些奇怪的副作用嗎?我怎樣才能擺脫這些「@」符號(如果這是什麼導致我的表同步中斷)?
編輯我已經添加了C#標記,因爲這可能與典型企業環境中F#和C#之間的區別有關。
這些是您的屬性的內部後備字段的名稱。出於某種原因,即使您的JSON序列化程序使用屬性進行了修飾,但它們仍可以使用字段而不是屬性。 –
感謝Fyodor。這使我能夠找到答案。 TableSync現在正在正常工作。 –