Я пытаюсь вывести список объектов в формате json с помощью класса DataContractJsonSerializer, однако продолжаю сталкиваться со следующей ошибкой.
Type 'Castle.Proxies.JokeCategoryProxy' with data contract name
'JokeCategoryProxy:http://schemas.datacontract.org/2004/07/Castle.Proxies'
is not expected. Consider using a DataContractResolver or add any types not
known statically to the list of known types - for example, by using the
KnownTypeAttribute attribute or by adding them to the list of known
types passed to DataContractSerializer.
Я знаю, что на это уже был дан ответ, но это происходит только тогда, когда в моем объекте a имеют свойство, которое является другим настраиваемым объектом.
[DataContract]
[KnownType(typeof(ModelBase<int>))]
public class Joke : ModelBase<int>
{
[DataMember]
public virtual string JokeText { get; set; }
[DataMember]
public virtual JokeCategory JokeCategory { get; set; }
}
[DataContract]
[KnownType(typeof(ModelBase<int>))]
public class JokeCategory : ModelBase<int>
{
[DataMember]
public virtual string Name { get; set; }
}
Как вы можете видеть, модель шутки содержит объект категории шутки, если я удалю категорию шутки и просто установлю int (JokeCategoryId), ошибка исчезнет, хотя решение, а не идеальный вариант, поскольку я хотел бы, чтобы Категория была доступна без повторных запросов.
Ниже приведен код, который я использую для генерации json
public static ContentResult JsonResponse<TReturnType>(this Controller controller, TReturnType data)
{
using (var oStream = new System.IO.MemoryStream())
{
new DataContractJsonSerializer(typeof(TReturnType)).WriteObject(oStream, data);
return new ContentResult
{
ContentType = "application/json",
Content = Encoding.UTF8.GetString(oStream.ToArray()),
ContentEncoding = Encoding.UTF8
};
}
}
Больше всего меня смущает то, что ошибка ссылается на Castle.Proxies.JokeCategoryProxy (откуда это взялось?!)
Есть предложения?