我正在尝试将Json字符串反序列化为调试模式下的对象,但它的工作正常,但是在发布模式下抛出错误,使得System.RuntimeType不包含声明属性的定义......
任何帮助都会受到赞赏
public T DeserializeJSon<T>(string jsonString)
{
dynamic dT = typeof(T);
if (dT.Name.EndsWith("List"))
dT = dT.DeclaredProperties[0].PropertyType.GenericTypeArguments[0];
DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings()
{
DateTimeFormat = new DateTimeFormat(DateTimeFormat),
UseSimpleDictionaryFormat = true
};
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T), settings);
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(stream);
stream.Dispose();
return obj;
}
答案 0 :(得分:0)
DeclaredProperties
是System.TypeInfo
的成员,不是System.Type
的成员,最不是dyanmic
的成员。
因此,只需写下来:
Type dt = typeof(T);
if (dT.Name.EndsWith("List"))
dT = dT.GetTypeInfo().DeclaredProperties.First().PropertyType.GenericTypeArguments[0];
我强烈建议您不要使用dyanmic
,除非您真的需要它(这不是这里的情况)。 Dynamic
只会将实际错误(在您的情况下访问不存在的成员)转移到运行时而不是编译器,这会使查找错误变得更加困难。另一个原因是你已经知道表达式typeof(T)
的运行时类型,它是 allways System.Type
。您为什么要使用dynamic
隐藏此信息?