gpt4 book ai didi

c# - 反序列化为 JObject 时获取类型名称

转载 作者:太空狗 更新时间:2023-10-30 01:04:44 27 4
gpt4 key购买 nike

有没有办法在使用反序列化时获取 $type 属性?我使用 TypeNameHandling 进行序列化,但是当我反序列化时,我没有包含类型信息的程序集。我需要使用 Type 名称将其存储在正确的集合中,看起来 $type 没有被带到 JObject 中。

编辑:如果我反序列化为 JObject,我可以获得 $type,但如果我反序列化为具有对象作为属性的类,则类型为 null。不确定为什么它会被删除,因为 json 中存在 $type。示例如下:

public class Container {
public object Test { get; set; }
}

反序列化代码

var container = new Container {
Test = new Snarfblat()
};


var json = JsonConvert.SerializeObject(container,
new JsonSerializerSettings {
TypeNameHandling = TypeNameHandling.Objects
});
var deserializedContainer = JsonConvert.DeserializeObject<Container>(json);

var type = ((JObject) deserializedContainer.Test)["$type"];
// Type is null

var deserializedContainer2 = JsonConvert.DeserializeObject<JObject>(json);

var type2 = deserializedContainer2["Test"]["$type"];
// Type is snarfblat

最佳答案

您可以通过在反序列化时将 MetadataPropertyHandling 设置为 Ignore 来防止 Json.Net 使用 $type 属性:

var deserializedContainer = JsonConvert.DeserializeObject<Container>(json,
new JsonSerializerSettings {
MetadataPropertyHandling = MetadataPropertyHandling.Ignore
});

var type = ((JObject) deserializedContainer.Test)["$type"];
// Type is Snarfblat

fiddle :https://dotnetfiddle.net/VBGVue

关于c# - 反序列化为 JObject 时获取类型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com