كيف يمكنني تخلص من قائمة XML باستخدام RestSharp؟
سؤال
لدي XML مثل هذا
<?xml version="1.0" encoding="utf-8"?>
<xml>
<item>
<accountid>1</accountid>
<accounttypeid>1</accounttypeid>
<accounttypename/>
<accountbankid>1</accountbankid>
<accountbankname/>
<accountsaldo>0</accountsaldo>
</item>
<item>
<accountid>2</accountid>
<accounttypeid>1</accounttypeid>
<accounttypename/>
<accountbankid>2</accountbankid>
<accountbankname/>
<accountsaldo>0</accountsaldo>
</item>
...
</xml>
أريد إلغاء تمييز قائمة XML هذه إلى كائن POCO الذي هو
public class Account
{
public string AccountId { get; set; }
public string AccountTypeId { get; set; }
public string AccountTypeName { get; set; }
public string AccountBankId { get; set; }
public string AccountBankName { get; set; }
public string AccountSaldo { get; set; }
}
لقد وجدت منتجًا رائعًا RestSharp للعمل مع عميل REST. أريد استخدام Deserializer الخاص به وحاولت 2 نهجا.
1) حاولت
request.RootElement = "item";
var response = Execute<Account>(request);
وحصلت فقط على عنصر العنصر الأول وهو منطقي.
2) عندما أحاول شيئًا مثل
request.RootElement = "xml";
var response = Execute<List<Account>>(request);
حصلت على لاغ.
أين أنا مخطئ في هذا؟
تحديث: الحل في تعليقات الإجابة المقبولة
المحلول
يجب أن تعمل إذا قمت بإعادة تسمية Account
الفئة الى Item
والاستخدام Execute<List<Item>>(request)
. لا تحتاج إلى تحديد قيمة الجذور.
نصائح أخرى
لست متأكدًا من الخطأ ، لكنني متأكد من أن جون سيكون قريبًا لإعلامك :-) في هذه الأثناء ، لماذا لا تفعل ذلك فقط بالطريقة اليدوية:
var root = XElement.Parse(xmlString);
var accounts = from it in root.Element("xml").Elements("item")
select new Account() {
AccountId = it.Element("accountid").Value,
AccountTypeId = it.Element("accounttypeid").Value,
AccountTypeName = it.Element("accounttypename").Value,
AccountBankId = it.Element("banktypeid").Value,
AccountBankName = it.Element("banktypename").Value,
AccountSaldo = it.Element("accountsaldo").Value
};
إنه نظيف وسهل مع Xlinq. عن طريق إضافة بعض طرق التمديد إلى xelement ، يمكنك جعلها أكثر نظافة ومرنة للعناصر/السمات المفقودة.