【发布时间】:2017-03-29 15:04:37
【问题描述】:
我的序列化和反序列化有问题。 下面的代码在序列化时将 List 对象记录作为列表,但是在反序列化时它不起作用。
每个标签参数都是对象类型
TreeViewCollection = new ObservableCollection<TreeViewItem>()
{
new TreeViewItem()
{
Header = "Suite 1"
},
new TreeViewItem()
{
Header = "Suite 2",
Nodes = new ObservableCollection<TreeViewItem>()
{
new TreeViewItem()
{
Header = "Case 1"
}
}
},
new TreeViewItem()
{
Header = "Suite 2",
Nodes = new ObservableCollection<TreeViewItem>()
{
new TreeViewItem()
{
Header = "Case 2",
Tag = new List<ListViewItem>()
{
new ListViewItem()
{
Tag = new ActionObject()
{
Command = "Command",
Target = "Target",
Value = "Value",
Comment = "Comment"
}
}
}
},
new TreeViewItem()
{
Header = "Case 3"
}
}
}
};
string serializedJson = JsonConvert.SerializeObject(TreeViewCollection, Formatting.Indented, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
});
var deserializedObject = JsonConvert.DeserializeObject<ObservableCollection<TreeViewItem>>(serializedJson, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
});
TreeViewCollection = deserializedObject;
但是它以 JSON 形式出现,而不是 List() 对象
{[
{
"$type": "RFA.Models.Items.ListViewItem, RFA",
"ID": "0b9661f0-87f1-41f4-85cb-620dc1f49bb3",
"Name": null,
"Tag": {
"$type": "RFA.Models.Objects.ActionObject, RFA",
"Command": "Command",
"Target": "Target",
"Value": "Value",
"Comment": "Comment"
}
}
]}
如何让 json 反序列化以处理对象类型
请求的 TreeviewItem 类:
public partial class TreeViewItem
{
#region Private Variables
private string _header;
private object _tag;
private ObservableCollection<TreeViewItem> _nodes;
#endregion
#region Properties
public string Header
{
get { return _header; }
set
{
if (value == _header) return;
_header = value;
OnPropertyChanged();
}
}
public object Tag
{
get { return _tag; }
set
{
if (value == _tag) return;
_tag = value;
OnPropertyChanged();
}
}
public ObservableCollection<TreeViewItem> Nodes
{
get { return _nodes; }
set
{
if (Equals(value, _nodes)) return;
_nodes = value;
OnPropertyChanged();
}
}
#endregion
}
【问题讨论】:
-
1) 可以分享
TreeViewItem类型,或者简化版吗?没有minimal reproducible example 就很难知道您的问题。是System.Windows.Controls.TreeViewItem吗? 2) 你能通过但它以 JSON 而非 List() 对象 的形式出现吗? -
我提供了 Treeviewitem 类,这个类是 system.windows.controls.TreeViewItem 的“副本”。不,我不能使用原来的课程。当我反序列化 JSON 字符串时,而不是将其解析为 List
对象。相反,如果保留为 json 字符串。没有抛出错误,但它与我的代码混淆,因为我的代码需要一个列表。
标签: c# json serialization deserialization