用于将json从字符串反序列化为DataContract的方法中的匿名类型

时间:2016-12-29 04:26:30

标签: c# generics datacontractjsonserializer

我正在尝试编写一个匿名方法,以便将Json反序列化为DataContract。这将允许我有一些可重用的东西,而不必为我为每个json查询编写的每个DataContract类编写相同的代码。

我到目前为止的代码如下:

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中给我错误如下:

error

如何在不对类型进行硬编码的情况下调整它以使其按照我的意图工作?

1 个答案:

答案 0 :(得分:1)

as关键字表示该类型是引用类型,而不是值类型。您无法将null存储在值类型中。因此,您需要将类型T限制为引用类型:

public T Json2Object<T>(string json, Encoding encoding) where T : class {
    // ...
}

施放而非使用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;
}