2016-09-20 15 views
0

我有序列化pcl類對象的問題,因爲無法評估類對象屬性。我的解決方案的結構是具有三個項目 -無法評估便攜式類庫對象屬性

  1. Xamarin.Android,參考服務,和DTO
  2. PCL(對於服務),參考DTO(目標框架:.Net框架4.5,ASP.Net核心1.0 ,Windows 8,Windows Phone 8.1,Xamarin.Android,Xamarin.iOS,Xamarin.iOS(經典)
  3. PCL(for Dto))(目標框架:.Net Framework 4.5,ASP.Net Core 1.0,Windows 8,Windows Phone 8.1,Xamarin.Android,Xamarin.iOS,Xamarin.iOS(經典)

solution structure

我在服務類像一個方法 -

public async Task<HttpResponseMessage> SignIn(string username, string password) 
{ 
    var user = new Dto.UserLogin(username, password); 
    var serialize = Newtonsoft.Json.JsonConvert.SerializeObject(user); 
    var content = new StringContent(serialize); 
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

    HttpResponseMessage response = null; 

    using (var client = GetClient("{urlhere}", username, "POST")) 
    { 
     response = await client.PostAsync("api/{methodname}", content); 
    } 

    return response; 
} 

上面的代碼不會引發錯誤,並可以實例化「用戶」變量。然而,問題在於,當序列化行發生時,它沒有序列化。似乎「用戶」對象無法訪問或顯示「電子郵件」和「密碼」這兩個屬性。但我可以通過使用「user.Email」在調試中訪問它們。我附上了它的截圖。

enter image description here

電子郵件和密碼屬性是公開的。

感謝, 馬文

+0

您是否檢查過鏈接器設置是否有所作爲?嘗試使用鏈接器進行測試。還要檢查你試圖序列化的對象是否有一個默認的無參數構造函數。 – Jack

+0

@傑克,謝謝!是的,鏈接器有所作爲。目前我的調試和發佈模式鏈接器設置被設置爲「SDK和用戶程序集」。如果我把它放回「無」,它將起作用。我從字面上來說是Xamarin開發的新手,確切的說是1周。我不完全理解鏈接器設置以及調試和發佈中應該使用的內容。你能告訴我更多關於它嗎?雖然我不需要無參數的構造函數。 – marvs

回答

0

從@Jack註釋幫助我找出元兇。在Xamarin.Android屬性設置 - > Android選項 - >鏈接器中,目前它被設置爲「SDK和用戶程序集」。我將它改爲「SDK Assemblies Only」,這解決了問題。

+0

鏈接器會分析您的代碼並從您的項目中去除*「未使用」*類/方法。這個想法是減少應用程序的文件大小。不幸的是,有時候鏈接器會刪除實際需要的代碼,例如剝離一個看似未使用的無參數構造函數。 – Jack