Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 如何使用JIL使用参数化构造函数反序列化类型?_C#_.net_Serialization_Deserialization_Jil - Fatal编程技术网

C# 如何使用JIL使用参数化构造函数反序列化类型?

C# 如何使用JIL使用参数化构造函数反序列化类型?,c#,.net,serialization,deserialization,jil,C#,.net,Serialization,Deserialization,Jil,我有一个简单的不可变POCO定义为: public sealed class Person { public Person(string name) { Name = name; TimeStamp = DateTimeOffset.UtcNow; } public DateTimeOffset TimeStamp { get; } public string Name { get; } } 然后,我执行一个简单

我有一个简单的不可变POCO定义为:

public sealed class Person
{
    public Person(string name)
    {
        Name = name;
        TimeStamp = DateTimeOffset.UtcNow;
    }

    public DateTimeOffset TimeStamp { get; }    
    public string Name { get; }
}
然后,我执行一个简单的ser反序列化:

var p = new Person("Mr Right").Dump();

var ser = JSON.Serialize(p).Dump();

// Throws Deserialization Exception, Error occured building a deserializer, 
// Expected a parameterless constructor...
JSON.Deserialize<Person>(ser).Dump();
var p=新人(“右先生”).Dump();
var ser=JSON.Serialize(p.Dump();
//引发反序列化异常,生成反序列化程序时出错,
//应为无参数构造函数。。。
反序列化(ser.Dump();
序列化成功地生成了:

{“时间戳”:“/日期(1456412550349+0000)/”,“姓名”:“右先生”}


但是反序列化抛出,你知道如何修复它吗?
JIL
支持使用参数化构造函数反序列化类型吗?

正如您所注意到的,没有无参数构造函数*,JIL不支持反序列化类型。这是因为没有完全可靠的方法将参数映射到构造函数到公共成员(字段和属性)

当Jil反序列化时,它创建一个给定类型的空对象,然后设置它在JSON流中遇到的每个成员。如果没有默认构造函数,则无法创建空对象

*有两个例外,匿名类型和原始包装类型。匿名类型在参数和成员之间有一个语言定义的映射,类型是单参数(和opt-in)-这两种情况都可以解决,而一般情况则不能解决。

根据,
JIL
目前似乎不支持这一点:-(