将JObject转换为强类型对象

4

我正在使用JsonConvert将类似这样的对象进行序列化和反序列化:

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

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

当我反序列化Dto��,我得到了一个JObject类型的对象。在反序列化时,我想根据Dto创建强类型对象。我可以创建这些对象;但是,我不知道一种好的方法来填充它们的属性。我找到的最好的方法是这种不太可靠的方法:
MyEntity e = JsonConvert.DeserializeObject<MyEntity>(JsonConvert.SerializeObject(dto));

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

1
我不认为这样更高效,但至少更易读(我认为)MyEntity e = JObject.FromObject(dto).ToObject<MyEntity>(); - L.B
1个回答

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

以下是示例内容

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; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接