Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何约束T以支持DataContractJsonSerializer,而不在任何地方实现ISerializable?_C#_Json_Generics_Serialization_Extension Methods - Fatal编程技术网

C# 我如何约束T以支持DataContractJsonSerializer,而不在任何地方实现ISerializable?

C# 我如何约束T以支持DataContractJsonSerializer,而不在任何地方实现ISerializable?,c#,json,generics,serialization,extension-methods,C#,Json,Generics,Serialization,Extension Methods,我正在研究扩展方法,并试图约束T,以便该方法不适用于所有对象。。。只有DataContractJsonSerializer可以很好地处理的那些 public static string ToJSONString(this object obj) { using (var stream = new MemoryStream()) { var ser = new DataContractJsonSerializer(obj.GetTyp

我正在研究扩展方法,并试图约束T,以便该方法不适用于所有对象。。。只有DataContractJsonSerializer可以很好地处理的那些

public static string ToJSONString(this object obj)
    {
        using (var stream = new MemoryStream())
        {
            var ser = new DataContractJsonSerializer(obj.GetType());

            ser.WriteObject(stream, obj);

            return Encoding.UTF8.GetString(stream.ToArray());
        }
    }

泛型中可用的选项有。。。有限的。一种解决方法是使用反射(通常在泛型类型上的静态ctor中)来检查反射,但这可能有些过分。您是否可以添加
,其中T:class,new()
,这可能会在很大程度上将其限制为“实体”/DTO类型。

泛型中可用的选项是。。。有限的。一种解决方法是使用反射(通常在泛型类型上的静态ctor中)来检查反射,但这可能有些过分。您是否可以添加
where T:class,new()
,这可能会在很大程度上将其限制为“实体”/DTO类型。

“很好地使用”?需要更具体一些。DataContractJsonSerializer不仅仅适用于实现特定接口的对象。它适用于所有人。难道没有一些对象不适用于
DataContractJsonSerializer
?我只想把他们排除在外。例如,
System.Console
应该被排除在外。。。除非你说它可以被序列化,否则代码不会知道会说“控制台不能被序列化”。DataContractJsonSerializer不寻找任何接口。它只接受一个对象。不管序列化成功与否,它都会在尝试之前不知道,“与”配合得好吗?需要更具体一些。DataContractJsonSerializer不仅仅适用于实现特定接口的对象。它适用于所有人。难道没有一些对象不适用于
DataContractJsonSerializer
?我只想把他们排除在外。例如,
System.Console
应该被排除在外。。。除非你说它可以被序列化,否则代码不会知道会说“控制台不能被序列化”。DataContractJsonSerializer不寻找任何接口。它只接受一个对象。不管序列化成功还是失败,只有尝试了才会知道。