Как преобразовать список иерархии в JSON - PullRequest
1 голос
/ 23 июля 2011

Я использую ASP.NET MVC3

У меня есть список иерархии такого типа:

public class TreeNode
{
public int id;
public int title;
public int parentid;
}
var myHierarchyList=new List<TreeNode>();
//(the tree has a root with id=1 and parentid=0 and title=root)

Мне нужна функция для генерации данных json из myHierarchyList.что-то вроде этого:

[{
    "id":1,
    "text":"cat1",
    "childrens":[{
        "id":2,
        "text":"cat2"
    },{
        "id":3,
        "text":"cat3",
        "childrens":[{
            "id":4,
            "text":"cat4"
        },{
            "id": 8,
            "text":"cat5"
        }]
    }]
}]

Пожалуйста, помогите мне.Спасибо.

Ответы [ 2 ]

1 голос
/ 23 января 2013

Посмотрите на шаблон составного дизайна.Это позволяет вам выстраивать иерархию различных объектов, рекурсивно перебирать и использовать строитель строк для генерации XML, JSON HTML и т. Д.

0 голосов
/ 23 июля 2011

Может быть что-то вроде:

namespace MyNameSpace
{
    using System.Runtime.Serialization.Json;
    using System.IO;
    using System.Text;

    public static class JsonExtensions
    {
        public static string JsonSerialize<T>(this T obj) where T : class
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream stream = new MemoryStream())
            {
                serializer.WriteObject(stream, obj);
                return Encoding.Default.GetString(stream.ToArray());
            }
        }

        public static T JsonDeserialize<T>(this T obj, string json) where T : class
        {
            using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                return serializer.ReadObject(stream) as T;
            }
        }
    }
}


...................


void somefuntion()
{
    MyObject myObject = new MyObject()
    ...Do stuff to myObject .........
    ............

    // Get myObject as a Json String
    string json = myObject.JsonSerialize();
}
...