Поэтому я пытаюсь сериализовать только те свойства интерфейса, которые существуют в интерфейсе, а не сам базовый тип.
С этой целью, следуя this , я ' Мы написали следующий код:
public static IEnumerable<T> ToInterfacedObjects<T>(this IEnumerable<T> data) where T : class
{
var list = new List<T>();
var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var datum in data)
{
var moq = new Mock<T>();
foreach (var propertyInfo in properties)
{
var expressionParameter = Expression.Parameter(typeof(T));
var expressionProperty = Expression.Property(expressionParameter, propertyInfo);
var expressionConversion = Expression.Convert(expressionProperty, typeof(object));
var expressionLambda =
Expression.Lambda<Func<T, object>>(expressionConversion, expressionParameter);
moq.SetupGet(expressionLambda).Returns(datum);
}
list.Add(moq.Object);
}
return list;
}
Проблема в том, что я получаю
System.ArgumentException: 'Выражение не является доступом к свойству: => (объект). ReportName '
On line moq.SetupGet(expressionLambda).Returns(datum);
.
ReportName
является одним из свойств в IReport
. Я пытаюсь сериализовать IEnumerable<IReport>
, который под капотом содержит List<Report>
, но я не хочу, чтобы все в Report
было сериализовано.
public interface IReport
{
string ReportName { get; }
string ReportSubject { get; }
string ReportType { get; }
string FilesUrl { get; }
ReportStatus Status { get; }
decimal LastRunDate { get; }
decimal LastRunTime { get; }
string UserCreated { get; }
decimal DateCreated { get; }
string UserUpdated { get; }
decimal DateUpdated { get; }
string DistListAdmin { get; }
decimal DistListUpdateDate { get; }
string DistListUpdateUser { get; }
}
Что я делаю не так?