Json.NET을 사용하여 jsTree의 트리 구조를 직렬화 및 비 직렬화하려고합니다. 몇 가지 예를 JSON 여기Json.NET은 중첩 된 객체를 비 직렬화하지 않습니다.
private class Metadata
{
[JsonProperty(PropertyName = "nodeType")]
public NodeType NodeType;
[JsonProperty(PropertyName = "typeDepth")]
public int TypeDepth;
}
private class TreeNode
{
[JsonProperty(PropertyName = "data")]
public String Title;
[JsonIgnore]
public NodeType NodeType;
[JsonIgnore]
public int TypeDepth;
[JsonProperty(PropertyName = "children", NullValueHandling = NullValueHandling.Ignore)]
public List<TreeNode> Children;
[JsonProperty(PropertyName = "metadata")]
public Metadata Metadata
{
get
{
return new Metadata() {NodeType = NodeType, TypeDepth = TypeDepth};
}
set {
TypeDepth = value.TypeDepth;
NodeType = value.NodeType;
}
}
private ItemGroup _itemGroup;
[JsonIgnore]
public ItemGroup ItemGroup
{
get
{
if(this.NodeType != NodeType.ItemGroup)
throw new InvalidDataException();
return _itemGroup;
}
set { _itemGroup = value; }
}
}
그리고있다 :
여기 클래스 정의입니다
[{
"data":"Strands",
"attr":{"class":""},
"state":"open",
"metadata":{
"nodeType":3,
"typeDepth":0},
"children":[{
"data":"Math",
"attr":{"class":"","rel":"itemGroup"},
"state":"open",
"metadata":{
"nodeType":1,
"typeDepth":0},
"children":[{
"data":"Subjects",
"attr":{"class":""},
"state":"open",
"metadata":{"nodeType":3,"typeDepth":1},
"children":[{
"data":"Algebra 1",
"attr":{"class":"","rel":"itemGroup"},
"state":"open",
"metadata":{
"nodeType":1,
"typeDepth":1},
"children":[{
"data":"Clusters",
"attr":{"class":""},
"state":"open",
"metadata":{
"nodeType":3,
"typeDepth":2},
"children":[{
"data":"Factoring",
"attr":{"rel":"itemGroup"},
"metadata":{
"nodeType":1,
"typeDepth":2}},
{"data":"Substitution",
"attr":{"class":"","rel":"itemGroup"},
"metadata":{"nodeType":1,"typeDepth":2}}]}]}]}]}]}]
내가 이런 식으로 역 직렬화 할 : 트리 구조가 제대로 직렬화 복원 List<TreeNode> tree = (List<TreeNode>)JsonConvert.DeserializeObject(form["treeJson"], typeof (List<TreeNode>));
, 노드 중 어느 것도 메타 데이터를 가지고 있지 않습니다.
누구나 여기서 무엇이 잘못 됐는지 보시나요?
감사합니다.
이 속성은 기존 트리 코드를 jsTree와 호환되도록 구현되었습니다. 그 세터가 그 일과 관련이 있는지 궁금해하고 있었지만 직설로 많은 코드를 변경하고 싶지 않았습니다. 감사. –