将 JObject 转换为强类型对象

Edw*_*rey 5 .net json json.net

我用来JsonConvert序列化和反序列化类中的对象,如下所示:

public class DbBulkRequest
{
    public DbEntity[] Updates { get; set; }
}

public class DbEntity
{
    public string Name { get; set; }
    public object Dto { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我反序列化时Dto,我得到一个类型的对象JObject。在反序列化时,我想创建基于Dto. 我可以创建对象;但是,我不知道填充其属性的好方法。我发现的最好的方法是这种芝士球方法:

MyEntity e = JsonConvert.DeserializeObject<MyEntity>(JsonConvert.SerializeObject(dto));
Run Code Online (Sandbox Code Playgroud)

什么是更有效的解决方案?

GSe*_*rjo 3

添加TypeNameHandling

private readonly JsonSerializerSettings defaultSettings = new JsonSerializerSettings
    {
        Formatting = Formatting.Indented,
        TypeNameHandling = TypeNameHandling.Auto
    };
Run Code Online (Sandbox Code Playgroud)

这是例子

private readonly JsonSerializerSettings defaultSettings = new JsonSerializerSettings
    {
        Formatting = Formatting.Indented,
        TypeNameHandling = TypeNameHandling.Auto
    };

[Fact]
public void Test()
{
    var entity = new DbEntity
        {
            Dto = new TestDto { Value = "dto" },
            Name = "Entity"
        };
    string serializedObject = JsonConvert.SerializeObject(entity, defaultSettings);
    var deserializedObject = JsonConvert.DeserializeObject<DbEntity>(serializedObjest, defaultSettings);
}

public class DbBulkRequest
{
    public DbEntity[] Updates { get; set; }
}

public class DbEntity
{
    public object Dto { get; set; }
    public string Name { get; set; }
}

public class TestDto
{
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)