我想反序列化我從Asana API中的用戶/我調用中獲取的數據,如下所示,但對象正在返回null jsonResponse var。數據在那裏 - 如果我將其作爲純文本閱讀,我可以看到它。我也嘗試使用[JsonProperty(「id」)]屬性而不是[DataMember]用於JsonSerializer而不是DataContractJsonSerializer,但我得到一個異常:「無法投射類型爲'Newtonsoft.Json.Linq.JObject的對象'鍵入'Data2'。「不能將Asana用戶數據反序列化爲C#類
我在做什麼錯?
注:我一直在使用Xamasoft JSON Class Generator創建類;請參閱GetUser方法下面的類。
public AsanaObjects.Data2 GetUser()
{
AsanaObjects.Data2 result = null;
string url = "https://app.asana.com/api/1.0/users/me";
try
{
var uri = new Uri(url);
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CertificateCheck);
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
//Must use Tls12 or else exception: "The underlying connection was closed: An unexpected error occurred on a send." InnerException = {"Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host."}
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.Timeout = 10000;
webRequest.Method = "GET"; webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Accept = "application/json";
//webRequest.UseDefaultCredentials = true; //doesn't seem to make a difference
webRequest.Headers.Add("Authorization", "Bearer " + AsanaBroker.Properties.Settings.Default.AccessToken);
using (var response = webRequest.GetResponse())
{
//using (var responseStream = ((HttpWebResponse)response).GetResponseStream())
//{
// if (responseStream != null)
// {
// var reader = new System.IO.StreamReader(responseStream);
// string readerText = reader.ReadToEnd();
// //Example return data: {"data":{"id":12343281337970,"name":"Eric Legault","email":"[email protected]","photo":null,"workspaces":[{"id":1234250096894,"name":"foo"},{"id":123446170860,"name":"Personal Projects"},{"id":12345000597911,"name":"foo2"}]}}
// }
//}
using (var responseStream = ((HttpWebResponse)response).GetResponseStream())
{
if (responseStream != null)
{
try
{
AsanaObjects.Data2 jsonResponse = null;
var jsonSerializer = new DataContractJsonSerializer(typeof(AsanaObjects.Data2));
jsonResponse = jsonSerializer.ReadObject(responseStream) as AsanaObjects.Data2;
if (jsonResponse != null)
{
result = jsonResponse;
}
}
catch (Exception ex)
{
Log.Error(ex);
}
}
}
}
}
catch (Exception ex)
{
}
return result;
}
這是我嘗試反序列化到(抱歉初始格式化部分 - 不知道如何解決)類:
公共部分類AsanaObjects { [DataContract] 公共類工作空間 { [DataMember] public object id {get;組; }
[DataMember]
public string name { get; set; }
}
}
public partial class AsanaObjects
{
[DataContract]
public class Data2
{
[DataMember]
public long id { get; set; }
[DataMember]
public string name { get; set; }
[DataMember]
public string email { get; set; }
[DataMember]
public object photo { get; set; }
[DataMember]
public Workspace[] workspaces { get; set; }
}
}
public partial class AsanaObjects
{
[DataMember]
public Data2[] data { get; set; }
}
能否請您發佈的原始內容/ JSON,你得到回到API調用 – Jonathan
當然,這個例子也在我的GetUser方法的註釋代碼中:{「data」:{「id」:12343281337970,「name」:「Eric Legault」,「email」:「eric @ foo .com「,」photo「:null,」workspaces「:[{」id「:1234250096894,」name「:」foo「},{」id「:123446170860,」name「:」Personal Projects「},{」 id「:12345000597911,」name「:」foo2「}]}} –