我有一个带有RegisterConverters类的JavaScriptSerializer来序列化DataTime。在同一个班级中,我使用Deserialize
方法抛出NotImplementedException
。序列化对象时,RegisterConverters
类正常工作。
当使用相同的JavaScriptSerializer
对象将DeSerialize Json Object返回到所需的Class对象时,它会抛出NotImplementedException
。
此处我不想使用Deserilize
类的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。
答案 0 :(得分:0)
所以我要问的第一个问题是你传递给RegisterConverters方法的是什么?您是否编写了自己的JavascriptConverter来处理DateTime序列化和反序列化。如果是这样,那么您编写的JavascriptConverter类可能在Deserialize方法中抛出NotImplementedException。
如果您正在使用第三方JavascriptConverter,我会查看他们的源代码,或者如果您没有源代码使用JetBrains中的dotPeek或Telerik的JustDecompile等工具对源进行反编译/ p>