将 json 从字符串反序列化为 DataContract 的方法中的匿名类型
Anonymous type in method for Deserializing json from a string to DataContract
我正在尝试编写一个匿名方法以将 Json 反序列化为 DataContract。这将允许我有一些可重用的东西,而不必为我为每个 json 查询编写的每个 DataContract class 编写相同的代码。
我目前的代码如下:
public T Json2Object<T>(string json, Encoding encoding) {
T result;
DataContractJsonSerializer ser = new DataContractJsonSerializer( typeof( T ) );
using ( Stream s = new MemoryStream( ( encoding ?? Encoding.UTF8 ).GetBytes( json ?? "" ) ) ) {
result = ser.ReadObject( s ) as T;
}
return result;
}
它在 IDE 中给我错误如下:
如何在不对类型进行硬编码的情况下进行调整,使其按我的预期工作?
as
关键字表示该类型是引用类型,而不是值类型。您不能将 null
存储在值类型中。因此,您要么需要将类型 T
限制为引用类型:
public T Json2Object<T>(string json, Encoding encoding) where T : class {
// ...
}
或cast而不是使用as
:
public T Json2Object<T>(string json, Encoding encoding) {
T result;
DataContractJsonSerializer ser = new DataContractJsonSerializer( typeof( T ) );
using ( Stream s = new MemoryStream( ( encoding ?? Encoding.UTF8 ).GetBytes( json ?? "" ) ) ) {
result = (T)ser.ReadObject( s );
}
return result;
}
我正在尝试编写一个匿名方法以将 Json 反序列化为 DataContract。这将允许我有一些可重用的东西,而不必为我为每个 json 查询编写的每个 DataContract class 编写相同的代码。
我目前的代码如下:
public T Json2Object<T>(string json, Encoding encoding) {
T result;
DataContractJsonSerializer ser = new DataContractJsonSerializer( typeof( T ) );
using ( Stream s = new MemoryStream( ( encoding ?? Encoding.UTF8 ).GetBytes( json ?? "" ) ) ) {
result = ser.ReadObject( s ) as T;
}
return result;
}
它在 IDE 中给我错误如下:
如何在不对类型进行硬编码的情况下进行调整,使其按我的预期工作?
as
关键字表示该类型是引用类型,而不是值类型。您不能将 null
存储在值类型中。因此,您要么需要将类型 T
限制为引用类型:
public T Json2Object<T>(string json, Encoding encoding) where T : class {
// ...
}
或cast而不是使用as
:
public T Json2Object<T>(string json, Encoding encoding) {
T result;
DataContractJsonSerializer ser = new DataContractJsonSerializer( typeof( T ) );
using ( Stream s = new MemoryStream( ( encoding ?? Encoding.UTF8 ).GetBytes( json ?? "" ) ) ) {
result = (T)ser.ReadObject( s );
}
return result;
}