2

私は、さまざまなフロント エンド (MVC3、WPF4、WP7) に MVVM を使用するクロスプラットフォーム プロトタイプで Glimpse をテストしてきましたが、Json.NET シリアライゼーションの問題により、MVC3 で Glimpse に問題が発生したようです。Glimpse は、MVVM を使用していないビューで正常に動作しています。

MVVMLight v3.0.3、Autofac for DI v2.5.2、Glimpse v0.86 を使用。

Glimpse のログは次のとおりです。

2011-12-14 11:23:39.9096|INFO|Glimpse.Core.Module|RequestId 2e9285ee-a2ac-44fe-bd26-e85fb2f83b1b の BeginRequest 処理が完了しました (/)|
2011-12-14 11:23:39.9096|警告|Glimpse.Mvc3.Plugin.Execution|System.Web.Mvc.ControllerActionInvoker 型の get_Binders メソッドはプロキシ可能ではありません。|
2011-12-14 11:23:39.9096|警告|Glimpse.Mvc3.Plugin.Execution|System.Web.Mvc.ControllerActionInvoker タイプの set_Binders メソッドはプロキシ可能ではありません。|
2011-12-14 11:23:39.9096|警告|Glimpse.Mvc3.Plugin.Execution|System.Web.Mvc.ControllerActionInvoker タイプの GetType メソッドはプロキシ可能ではありません。|
2011-12-14 11:23:39.9096|警告|Glimpse.Mvc3.Plugin.Execution|System.Web.Mvc.ControllerActionInvoker タイプの MemberwiseClone メソッドはプロキシ可能ではありません。|
2011-12-14 11:23:39.9356|INFO|Glimpse.Core.Module|RequestId 2e9285ee-a2ac-44fe-bd26-e85fb2f83b1b の PostRequestHandlerExecute 処理が完了しました (/)|
2011-12-14 11:23:39.9356|INFO|Glimpse.Core.Module|requestId 2e9285ee-a2ac-44fe-bd26-e85fb2f83b1b の PostReleaseRequestState 処理が完了しました (/)|
2011-12-14 11:23:39.9576|警告|Glimpse.Core.Plumbing.GlimpseSerializer|シリアライザー エラー|System.NotSupportedException--'CommandConverter' は 'GalaSoft.MvvmLight.Command.RelayCommand' を 'System.String' に変換できません'.-- System.ComponentModel.TypeConverter.GetConvertToException (オブジェクト値、タイプ destinationType) で
   System.Windows.Input.CommandConverter.ConvertTo (ITypeDescriptorContext コンテキスト、CultureInfo カルチャ、オブジェクト値、型 destinationType) で
   System.ComponentModel.TypeConverter.ConvertToString (ITypeDescriptorContext コンテキスト、CultureInfo カルチャ、オブジェクト値) で
   System.ComponentModel.TypeConverter.ConvertToInvariantString (オブジェクト値) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.TryConvertToString (オブジェクトの値、型の型、文字列) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeString (JsonWriter ライター、オブジェクト値、JsonStringContract コントラクト) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue (JsonWriter ライター、オブジェクト値、JsonContract valueContract、JsonProperty メンバー、JsonContract コレクションValueContract) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty (JsonWriter ライター、オブジェクト memberValue、JsonProperty プロパティ、JsonContract コントラクト) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter ライター、オブジェクト値、JsonObjectContract コントラクト、JsonProperty メンバー、JsonContract コレクションValueContract) で
2011-12-14 11:23:39.9756|WARN|Glimpse.Core.Plumbing.GlimpseSerializer|Serializer エラー|Newtonsoft.Json.JsonWriterException--ステート プロパティのトークン PropertyName は無効な JavaScript オブジェクトになります.-- Newtonsoft.Json で.JsonWriter.AutoComplete(JsonToken tokenBeingWritten)
   Newtonsoft.Json.JsonWriter.WritePropertyName (文字列名) で
   Newtonsoft.Json.JsonTextWriter.WritePropertyName (文字列名) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty (JsonWriter ライター、オブジェクト memberValue、JsonProperty プロパティ、JsonContract コントラクト) で
   Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter ライター、オブジェクト値、JsonObjectContract コントラクト、JsonProperty メンバー、JsonContract コレクションValueContract) で
...など

関連NotSupportedExceptionするモデル/ビューモデルのフィールドとプロパティをマークしてみまし[NonSerialized]たが、実装されているため、問題があるようです。[JsonIgnore][ScriptIgnore]CommandConverterRelayCommandICommand

[TypeConverter("System.Windows.Input.CommandConverter, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null"), ValueSerializer("System.Windows.Input.CommandValueSerializer, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null")]
public interface ICommand

誰でもそれを回避する方法を知っていますか?

JsonWriterExceptionまた、 : Token PropertyName in state Property would result in an invalid JavaScript objectを説明するのに途方に暮れており、他の人もそうであるようです。

トークン X状態 Xが何を指しているか知っている人はいますか?

4

1 に答える 1

2

これは既知の問題です。JsonIgnore が機能するはずだったのに機能しなかったことに驚いています...

より一般的には、ビュー モデルのシリアル化を導入して以来、「すべきではない」ことを行う際に問題が発生しました。この最大の例は、EF/NH モデルを VM として使用している人々であり、実行するシリアル化プロセスがデータベース全体の再帰的な遅延読み込みをトリガーします。

コードを変更して機能させるのは良い方法ではないことを認識しているため、デフォルトでシリアル化プロセスをオフにします。

残念ながら、これはまだ整っていないので、私があなたに提供できることはあまりありませんが、私たちはそれに取り組んでおり、すぐに修正する予定であることを知っておいてください.

アップデート:

ふと思ったことがあります。Glimpse はブラックリスト プラグインをサポートしています - http://getglimpse.com/Help/Configuration。これは、Views プラグインが実行されて問題が発生するのを防ぐことができることを意味します。ビュープラグインを引き続き機能させたい場合は、73行目で「モデル」をnullに設定することができます - https://github.com/Glimpse/Glimpse/blob/master/source/Glimpse.MVC3 /Plugin/Views.cs .

繰り返しますが、どちらも理想的ではないことはわかっていますが、今ここで稼働させることができます。

于 2011-12-15T19:44:13.767 に答える