0

わかりましたので、私はこれに似たクラスを持っています:

public class Channel
{
    public Guid Guid{get;set;}
    public string Title{get;set;}

    /* GOT A LOT MORE PROPERTIES IN THIS SPACE */

    public Guid Parent {get;set;}
    public List<Channel> Children{get;set;}
}

私も持っていますList<Channels>(合計で約650 Channels

ROOTチャネルには約 6 つのチャネルが含まれ、各チャネルには子などが含まれます。

のコードでわかるように、Channel他にも多くのプロパティがありますが、この場合はシリアル化したくありません。つまり、すべてがData Contracts基本クラスで既に定義されており、このアクションのためだけにそれらを変更することはできません。

それで、あなたが尋ねる私の問題は何ですか?List<Channels>orを取得してList<NewType>シリアル化しJSON、ツリー構造を維持する必要があります。

それが不可能な場合、少なくとも、構造List<Channels>JSON維持するためにどのようにシリアル化しますか?

編集: 私は使用していますNewtonsoft.Json

4

1 に答える 1

1

個人的には、リストをチャンネルの配列にシリアル化することをお勧めします...次の JSON の例を考えてみましょう:

{
    "Channel": {
        "Guid": "27182d04-29d9-4760-86d5-484ba43cd9c6",
        "Title": "FooBar",
        "Parent": "52cfd532-6010-41c5-8fa9-f3bcbb97a630",
        "Children": [
            {
                "Channel": {
                    "Guid": "27182d04-29d9-4760-86d5-484ba43cd9c6",
                    "Title": "FooBar",
                    "Parent": "52cfd532-6010-41c5-8fa9-f3bcbb97a630",
                    "Children": null
                }
            },
            {
                "Channel": {
                    "Guid": "27182d04-29d9-4760-86d5-484ba43cd9c6",
                    "Title": "FooBar",
                    "Parent": "52cfd532-6010-41c5-8fa9-f3bcbb97a630",
                    "Children": null
                }
            },
            {
                "Channel": {
                    "Guid": "27182d04-29d9-4760-86d5-484ba43cd9c6",
                    "Title": "FooBar",
                    "Parent": "52cfd532-6010-41c5-8fa9-f3bcbb97a630",
                    "Children": null
                }
            }
        ]
    }
}

EDIT:これは、この構造を書く小さなテストコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;

namespace JSONTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Channel c = new Channel();
            c.Guid = Guid.NewGuid();
            c.Parent = Guid.NewGuid();
            c.Title = "FooBar";
            c.Children = new List<Channel>();

            Channel a = new Channel();
            Channel b = new Channel();

            a.Guid = Guid.NewGuid();
            b.Guid = Guid.NewGuid();

            a.Parent = Guid.NewGuid();
            b.Parent = Guid.NewGuid();

            a.Title = "FooBar_A";
            b.Title = "FooBar_B";

            c.Children.Add(a);
            c.Children.Add(b);

            /* Serialization happens here!! */
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string result = serializer.Serialize(c);
            Console.WriteLine(result);
            Console.Read();
        }
    }

    public class Channel
    {
        public Guid Guid { get; set; }
        public string Title { get; set; }

        /* GOT A LOT MORE PROPERTIES IN THIS SPACE */

        public Guid Parent { get; set; }
        public List<Channel> Children { get; set; }
    }
}

これは、JSONLint を通過した後のテストの結果です。

{
    "Guid": "0e72c12c-a7a1-461a-8b84-8b17023e2e2f",
    "Title": "FooBar",
    "Parent": "d0943246-1adc-4208-bb3b-1249ffe5e7b4",
    "Children": [
        {
            "Guid": "1cf413be-d6b5-405e-8308-7c6dfe817f9a",
            "Title": "FooBar_A",
            "Parent": "ecf14fce-c97d-46f5-890b-bab8ff99fb4a",
            "Children": null
        },
        {
            "Guid": "bd96e6d3-f247-4a0d-9147-92da19793e97",
            "Title": "FooBar_B",
            "Parent": "5cd3e765-23c2-4145-8b45-9964a7c66c54",
            "Children": null
        }
    ]
}

有効な JSON!

編集:オブジェクト全体がチャネル型であり、「子」の各オブジェクトがチャネル型であるため、JavaScriptSerializer は「チャネル」を解析しないことに気付きました。この JSON を Deserialize メソッドを介して渡す場合、すべての JSON 永続データを使用してこれを C# 構造に戻す必要があります。

于 2012-11-05T12:51:19.280 に答える