我一直在跨平台原型上测试 Glimpse,该原型将 MVVM 用于各种前端(MVC3、WPF4、WP7),并且由于 Json.NET 序列化问题,似乎在 MVC3 中遇到了 Glimpse 问题。对于不使用 MVVM 的视图,Glimpse 可以正常工作。
使用 MVVMLight v3.0.3、Autofac for DI v2.5.2 和 Glimpse v0.86。
这是一瞥日志:
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|WARN|Glimpse.Mvc3.Plugin.Execution|get_Binders System.Web.Mvc.ControllerActionInvoker 类型的方法不可代理。| 2011-12-14 11:23:39.9096|WARN|Glimpse.Mvc3.Plugin.Execution|System.Web.Mvc.ControllerActionInvoker 类型的 set_Binders 方法不可代理。| 2011-12-14 11:23:39.9096|WARN|Glimpse.Mvc3.Plugin.Execution|System.Web.Mvc.ControllerActionInvoker 类型的 GetType 方法不可代理。| 2011-12-14 11:23:39.9096|WARN|Glimpse.Mvc3.Plugin.Execution|MemberwiseClone System.Web.Mvc.ControllerActionInvoker 类型的方法不可代理。| 2011-12-14 11:23:39.9356|INFO|Glimpse.Core.Module|PostRequestHandlerExecute 处理完成 requestId 2e9285ee-a2ac-44fe-bd26-e85fb2f83b1b (/)| 2011-12-14 11:23:39.9356|INFO|Glimpse.Core.Module|PostReleaseRequestState 处理完成 requestId 2e9285ee-a2ac-44fe-bd26-e85fb2f83b1b (/)| 2011-12-14 11:23:39.9576|WARN|Glimpse.Core.Plumbing.GlimpseSerializer|Serializer 错误|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(Object value, Type type, String& s) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeString(JsonWriter writer, Object value, JsonStringContract contract) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContract collectionValueContract) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteMemberInfoProperty(JsonWriter writer,Object memberValue,JsonProperty 属性,JsonContract 合同) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract) 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 writer,Object memberValue,JsonProperty 属性,JsonContract 合同) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContract collectionValueContract) ...等等
对于我尝试用或无效NotSupportedException
标记关联的模型/视图模型字段[NonSerialized]
和属性,这似乎是症结所在,因为实现:[JsonIgnore]
[ScriptIgnore]
CommandConverter
RelayCommand
ICommand
[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 会导致无效的 JavaScript 对象,似乎其他人也是。
有谁知道令牌 X和状态 X指的是什么?