我正在使用 c# 开发 ActivityPub 实现,有时链接是像 url 链接一样的“字符串”,有时链接是具有 Link 子类型的对象。(链接:实体)
我想知道如果一组条件为真(只需将一个字符串写入编写器),是否有可能使用 System.Text.Json 将 Link 对象序列化为字符串,并将整个默认对象写入如果条件不成立,请编写器。
我试过遵循这个解决方案:How to use default serialization in a custom System.Text.Json JsonConverter? ,它仍然适用于代码小提琴,但不适用于我的实施,我不太清楚为什么。
有谁知道我可以如何调试它,或者更好的方法来确保Link : Entity
对象有时可以序列化为字符串?
(在这种情况下,我什至尝试将获取的默认 ctor 添加到 modifiedOptions) Reguardless,它表示没有为 Link 类映射数据。我还尝试将 JsonSerializeable 属性直接添加到 Link 类。
错误:
Metadata for type 'ActivityPub.Types.Link' was not provided to the serializer. The serializer method used does not support reflection-based creation of serialization-related type metadata. If using source generation, ensure that all root types passed to the serializer have been indicated with 'JsonSerializableAttribute', along with any types that might be serialized polymorphically.
我的基本代码库:https ://github.com/Meep-Tech/ActivityHub.Net/tree/collapse_links_during_serialization
测试代码:
static void Main(string[] args) {
Settings.DefaultContext = new Link("ActivityPub.Net.Testing");
var testObject = new Object {
Type = "Test",
At = new Link("/terry") {
Rels = new string[] {
"test",
"test2"
}
},
Attribution = "/meep",
Audience = new Link("/all") {
Rel = "test"
}
};
string json = testObject
.Serialize();
System.IO.File.WriteAllLines(
"test.json",
new[] { json }
);
Object @object = json.DeSerializeEntity<Object>();
System.IO.File.WriteAllLines(
"test1.json",
new[] { @object.ToString() }
);
}