Я пытаюсь вывести список объектов в формате 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.
Я знаю, что на этот вопрос уже отвечали, но это только кажетсяслучается, когда в моем объекте есть свойство, являющееся другим пользовательским объектом.
[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; }
}
Как вы можете видеть, модель Joke содержит объект категории Joke, если я удаляю категорию Joke и просто имею 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 (откуда это взялось!!)
Есть предложения?