gpt4 book ai didi

c# - 如何防止使用 Newtonsoft JSON 序列化 DependencyObjects 上的 DependencyObjectType 信息?

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:30 25 4
gpt4 key购买 nike

当使用 Newtonsoft 的 JSON(版本 8.0.0)为 .Net/C# 序列化 DependencyObject 派生类时,我注意到它总是序列化DependencyObjectTypeDispatcher 对象以及我的所有派生类的属性。由于 DependencyObjectTypeDispatcher 对象来 self 继承自的 DependencyObject 类,我如何添加智能标记或属性(例如 [JsonIgnore]) 以防止它们被序列化?还是我的思考方式有误?

示例类代码:

public class MyClass : DependencyObject
{
public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));
}

序列化器代码:

JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(filePath))
using (JsonWriter jw = new JsonTextWriter(sw))
{
serializer.Serialize(jw, MyInstance);
}

当序列化时,我得到了这个巨大的 Blob (除了第一行之外的所有 Blob 都是不需要的):

{
"MyProperty": 0,
"DependencyObjectType": {
"Id": 148,
"SystemType": "MyProject.MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"BaseType": {
"Id": 0,
"SystemType": "System.Windows.DependencyObject, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxx",
"BaseType": null,
"Name": "DependencyObject"
},
"Name": "MyClass"
},
"IsSealed": false,
"Dispatcher": {
"Thread": {
"ManagedThreadId": 17,
"ExecutionContext": null,
"Priority": 2,
"IsAlive": true,
"IsThreadPoolThread": true,
"IsBackground": true,
"ThreadState": 4,
"ApartmentState": 1,
"CurrentUICulture": "en-US",
"CurrentCulture": "en-US",
"Name": null
},
"HasShutdownStarted": false,
"HasShutdownFinished": false,
"Hooks": {}
}
}

最佳答案

您可以使用 OptIn 抑制类型层次结构中除必需属性之外的所有属性序列化的方法:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]

并标记序列化属性:

[JsonProperty]

关于c# - 如何防止使用 Newtonsoft JSON 序列化 DependencyObjects 上的 DependencyObjectType 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35326836/

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