DataContractJsonSerializerクラスを使用してオブジェクトのリストをjson形式に出力しようとしていますが、次のエラーが発生します。カスタムクラスに別のカスタムクラスが含まれていると、DataContractResolver/KnownTypeの問題が発生する
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)を持っている場合はジョークモデルは、ジョークカテゴリオブジェクトが含まれて見ることができるように再度照会することなくカテゴリを利用できるようにする。以下は
は、私が一番私を混乱させるしてもエラーがCastle.Proxies.JokeCategoryProxy(これは?!から来た)
を参照することで、JSONpublic 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
};
}
}
を生成するために使用しているコードです。
何か提案がありますか?
非常に有用なものをsJhonny。現時点では私はDTOには進まないが、将来の発展のためにそれらを覚えておく。私の流暢なnhibernateマッピングファイルで.Not.LazyLoad()を使用すると、問題が直ちに解決されました。どうもありがとうございました。 – JConstantine