2015-05-21 2 views
0

Я хотел бы взять типизированный класс, скопировать его в динамический объект, добавить произвольное значение, а затем сериализовать его на объект json с помощью конвертера ServiceStack JSON. Что-то вроде этого:Как скопировать типизированный класс в динамический объект

dynamic toAddTo = new ExpandoObject(); 
toAddTo.CloneFrom(model); 
toAddTo.arbitratyValue = "Fancy Things"; 
return jsonApiType.ToJson(); 

Кто-нибудь сделал что-то, что сработает для этого исполнительным образом?

+0

Я предполагаю, что вы ищете реализацию 'CloneFrom'. Попробуйте [эта ссылка] (http://blog.jorgef.net/2011/06/converting-any-object-to-dynamic.html) –

+0

Мне было любопытно, если она испекла в CLR, каким-то образом я не или если есть уже существующая широко используемая библиотека, которая уже делает это. Однако эта ссылка полезна. Спасибо! – Jereme

+0

@jereme Хотя возможно копировать ** значение ** свойств/полей в 'ExpandoObject', это не будет копировать методы, и, вероятно, это невозможно сделать. – xanatos

ответ

1

Нет, вы должны добавить свойства к ExpandoObject индивидуально. Если исходный объект является статическим, а число свойств не слишком велик, вы можете создать анонимный тип:

var jsonApiType = new { 
    model.Name, 
    model.Age, 
    ... 
    arbitratyValue = "Fancy Things" 
}; 

return jsonApiType.ToJson(); 

или вы можете обернуть модель:

var jsonApiType = new { 
    model, 
    arbitratyValue = "Fancy Things" 
}; 

return jsonApiType.ToJson(); 

но изменения в результате JOSN , и я подозреваю, что вы ищете «умный» способ добавить свойство к вашему json, которого нет в вашей модели.

+0

Точно. Ссылка D Stanley, вышедшая выше, работает для того, что я хочу сделать. – Jereme

Смежные вопросы