1

我有一个带有 RegisterConverters 类的 JavaScriptSerializer 来序列化 DataTime。在同一个类中,我有Deserializethrows 的方法NotImplementedExceptionRegisterConverters序列化对象时类工作正常。

当使用相同的JavaScriptSerializer对象将 Json 对象反序列化回所需的 Class 对象时,它正在抛出NotImplementedException

这里我不想使用ClassDeserilize的方法。RegisterConverters我怎样才能做到这一点?它只是作为一个新JavaScriptSerializer对象工作,RegisterConverters在反序列化时没有。

public class DefaultNullPropertiesConverter : JavaScriptConverter
{
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        var jsonExample = new Dictionary<string, object>();
        foreach (var prop in obj.GetType().GetProperties())
        {
            //check if decorated with ScriptIgnore attribute
            bool ignoreProp = prop.IsDefined(typeof(ScriptIgnoreAttribute), true);

            var value = prop.GetValue(obj, BindingFlags.Public, null, null, null);
            if (value != null && !ignoreProp)
            {
                if (value.GetType().FullName == "System.DateTime" && Convert.ToDateTime(value) == DateTime.MinValue)
                    continue;
                else if (value.GetType().FullName == "System.DateTime")
                    jsonExample.Add(prop.Name, Convert.ToDateTime(value).ToString("yyyy-MM-dd"));
                else
                    jsonExample.Add(prop.Name, value);
            }
        }

        return jsonExample;
    }

    public override IEnumerable<Type> SupportedTypes
    {
        get { return GetType().Assembly.GetTypes(); }
    }

}

现在当我调用反序列化方法时:

var restGeoCodeResponse rgcr = jss.Deserialize<restGeoCodeResponse>(result); 

这不应该调用 DefaultNullPropertiesConverter 类的 Deserialize 方法。只需反序列化,因为它没有任何 RegisterConverts。

4

1 回答 1

0

所以我要问的第一个问题是你传递给 RegisterConverters 方法的是什么?您是否编写了自己的 JavascriptConverter 来处理 DateTime 序列化和反序列化。如果是这样,那么您编写的 JavascriptConverter 类可能在 Deserialize 方法中有一个 throws NotImplementedException。

如果您使用的是第 3 方 JavascriptConverter,我会查看他们的源代码,或者如果您没有他们的源代码,请使用JetBrains 的 dotPeek 或TelerikJustDecompile等工具反编译源代码

于 2013-03-26T07:11:42.680 回答