Есть ли синтаксис инициализации ExpandoObject
, который я могу использовать в своих интересах в запросе LINQ to XML для краткости?
Примечание. Результаты запроса предназначены для передачи за пределы текущей сборки, поэтому анонимные типы исключены (узнайте, почему здесь).
Я пытаюсь использовать краткий синтаксис, подобный следующему, для создания динамических/расширяемых объектов:
public IEnumerable<dynamic> ParseUserXml(string strXmlUser) {
var qClients =
from client in xdoc.Root.Element(XKey.clients).Elements(XKey.client)
// client object
// I cannot get ExpandoObject to initialize inline
select new ExpandoObject() { // try initialization syntax, COMPILE ERR
OnlineDetails = new
{
Password = client.Element(XKey.onlineDetails).
Element(XKey.password).Value,
Roles = client.Element(XKey.onlineDetails).
Element(XKey.roles).Elements(XKey.roleId).
Select(xroleid => xroleid.Value)
// More online detail fields TBD
},
// etc ....
// YIELD DYNAMIC OBJECTS BACK THROUGH IEnumerable<dynamic>...
foreach (var client in qClients)
{
yield return client;
}
Более сложными решениями для работы этого кода могут быть:
- вместо этого создайте конкретный класс и инициализируйте его (но я не хочу создавать их кучу).
- используйте анонимный тип и скопируйте его члены в динамический объект (несколько избыточный) и верните динамические объекты
Есть ли такой же короткий синтаксис для достижения того, что я намереваюсь сделать с помощью рассматриваемого ошибочного кода, или мне придется каким-то образом расширить кодовую базу, чтобы получить желаемый результат?