我想在我的 .net 專案中閱讀一些 SuccessFactors (SAP HR System) 資料。SuccessFactors 使用 OData v2 API 使資料可訪問。我使用以下代碼讀取用戶:
using (var client = new HttpClient())
{
var credential = Encoding.ASCII.GetBytes("username:pwd");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credential));
var json = await
client.GetStringAsync($"https://successfactorsServer.sapsf.eu/odata/v2/User?$filter=userId eq '{userId}'&$select=firstName, lastName");
var user = JsonConvert.DeserializeObject<User>(json);
return user;
}
問題是服務提供了
<id>https://api12preview.sapsf.eu/odata/v2/User('MaxMustermann')</id>
<title type="text"></title>
<updated>2022-06-17T20:27:31Z</updated>
<author>
<name></name>
</author>
<link rel="edit" title="User" href="User('MaxMustermann')"></link>
<category term="SFOData.User" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"></category>
<content type="application/xml">
<m:properties>
<d:firstName>Max</d:firstName>
<d:lastName>Mustermann</d:lastName>
</m:properties>
</content>
但這不能轉換為我的模型物件:public class User : INotifyPropertyChanged { public User() { }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => FirstName " " LastName;
public event PropertyChangedEventHandler PropertyChanged;
}
newtonsoft JsonConverter 有沒有辦法解決這個問題。那么 firstName 和 lastName 被識別并轉移到 User 物件?我不想完全在這個 JSON 結構中構建我的 C# 物件。而且我不確定如何處理 d: 在 JSON 屬性名稱前面。
有沒有更好的圖書館?
uj5u.com熱心網友回復:
您從 Api 獲取 xml 而不是 json。如果您無法修復 Api,則必須將 xml 轉換為 c# 物件
var response = await client.GetAsync(api);
var xml = await response.Content.ReadAsStringAsync();
xml="<root>" xml.Replace("m:","").Replace("d:","") "</root>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNode node = xmlDoc.SelectSingleNode("root");
var rawjson = JsonConvert.SerializeXmlNode(node).Dump();
User user = JObject.Parse(rawjson)["root"]["content"]["properties"].ToObject<User>();
uj5u.com熱心網友回復:
如此處所述:
只需要 JSON 回應的客戶端會將其 http 標頭設定為“application/json”。
例如:
GET /OData/OData.svc/Products HTTP/1.1 host: services.odata.org accept: application/json
要添加標題資訊,請使用
client.DefaultRequestHeaders.Add("accept", "application/json");
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493843.html