1

プログラムで Chrome のブックマーク ファイルにブックマークを追加しようとしています。これは JSON 形式で保存されており、JSON.Net を使用してデステラル化しています。役立つ場合は、これを滅菌解除するために使用するコードを次に示します。各ブックマークが読み取られると、Bookmark クラスに保存されます。

public class Bookmark
{
    public string url { get; set; }
    public string title { get; set; }
    public string browser { get; set; }
    public DateTime added { get; set; }
    public string fullPath { get; set; }
    public object currentPath { get; set; }
    public Bookmark(string url, string title, string browser, DateTime added, string fullPath, object currentPath = null)
    {
        this.url = url;
        this.title = title;
        this.browser = browser;
        this.added = added;
        this.fullPath = fullPath;
        this.currentPath = currentPath;
    }

ここで、ブックマークを殺菌して Chrome のブックマーク ファイルに保存しようとすると、問題が発生します。これを除菌しようとすると、リストに関する問題が発生します。私のクラスでは、各フォルダーは子として 1 つの URL またはフォルダーしか持てませんが、それをどのように実装するかはわかりません。また、これが機能するには、現在のフォルダーをチェックして最後のフォルダーと同じかどうかを確認する方法が必要であると考えていますが、これがどのように機能するかはわかりません.

予想される出力は次のとおりです。

"children": [ {
    "children": [ {
       "children": [ {
          "date_added": "12995911618983970",
          "id": "8",
          "name": "NestedNestedURL",
          "type": "url",
          "url": "http://url.com/"
       } ],
       "date_added": "12995911579845538",
       "date_modified": "12995911618983970",
       "id": "5",
       "name": "NestedNestedFolder",
       "type": "folder"
    }, {
       "date_added": "12995911609609970",
       "id": "7",
       "name": "NestedURL",
       "type": "url",
       "url": "http://url.com/"
    } ],
    "date_added": "12995911570603538",
    "date_modified": "12995911609609970",
    "id": "4",
    "name": "NestedFolder",
    "type": "folder"
 }, {
    "children": [ {
       "date_added": "12995911631570970",
       "id": "9",
       "name": "NestedURL2",
       "type": "url",
       "url": "http://url.com/"
    } ],
    "date_added": "12995911589790970",
    "date_modified": "12995911631570970",
    "id": "6",
    "name": "NestedFolder2",
    "type": "folder"
 }

そして、現在のコードで受け取った誤った出力は次のとおりです。

"children": [
  {
    "children": {
      "date_added": 12995893609609970,
      "id": 0,
      "name": "NestedURL",
      "type": "url",
      "url": "http://url.com/"
    },
    "date_added": 12995893609609970,
    "date_modified": 0,
    "id": 0,
    "name": "NestedFolder",
    "type": "folder"
  },
  {
    "children": {
      "date_added": 12995893618983970,
      "id": 1,
      "name": "NestedNestedURL",
      "type": "url",
      "url": "http://url.com/"
    },
    "date_added": 12995893618983970,
    "date_modified": 0,
    "id": 1,
    "name": "NestedFolder",
    "type": "folder"
  },
  {
    "children": {
      "date_added": 12995893631570970,
      "id": 2,
      "name": "NestedURL2",
      "type": "url",
      "url": "http://url.com/"
    },
    "date_added": 12995893631570970,
    "date_modified": 0,
    "id": 2,
    "name": "NestedFolder2",
    "type": "folder"
  }

私はこのコードを使用しています: すべてのクラスは JSON 滅菌用です。私が言ったように、Folder クラスで何かを変更する必要があると思います。

public void Sync()
{
    Browser browser = new Chrome();
    SortableBindingList<Bookmark> marks = browser.ReturnBookmarks();
    SortableBindingList<object> newmarks = new SortableBindingList<object>();
    int count = 0;
   newmarks.Add(new json_top());
    json_top top = newmarks[0] as json_top;

    top.roots = new json_root();
    List<object> roots = new List<object>();

    Folder bookmarks_bar = new Folder();
    Folder other = new Folder();
    List<Object> barlist = new List<Object>();
    List<object> otherlist = new List<object>();
    List<object> children = new List<object>();
    List<string> existingFolders = new List<string>();

    bookmarks_bar.date_added = ToChromeTime(marks[0].added);
    bookmarks_bar.name = "Bookmarks bar";
    other.date_added = ToChromeTime(marks[0].added);
    other.name = "Other bookmarks";

    bool isBookmarkBar = true;

    Folder folder = new Folder();
    foreach (Bookmark mark in ordered)
    {
        List<string> fullpathlist = mark.fullPath.Split('\\').ToList();
        int count1 = 0;
        if (currentPath != mark.fullPath)
        {
            folder = (createFolder(fullpathlist, fullpathlist[0], mark));
            folder.children = (setChild(fullpathlist, folder, mark, 1));
            count++;
        }
        json_URL u = new json_URL();
        u.date_added = ToChromeTime(mark.added);
        u.id = id;
        u.name = mark.title;
        u.url = mark.url;
        folder.children=(u);
        if(isBookmarkBar)
            barlist.Add(folder);
        else
        {
            otherlist.Add(folder);
        }
    }
    bookmarks_bar.children = barlist;
    other.children = otherlist;
    top.roots.bookmark_bar = (bookmarks_bar);
    top.roots.other = other;
    string json = JsonConvert.SerializeObject(newmarks, Formatting.Indented);
    File.WriteAllText(@"c:\person.json", json);
}

    Folder setChild(List<string> fullPathList, Folder parent, Bookmark mark, int count )
    {
        if (count < fullPathList.Count)
        {
            Folder child = new Folder();
            child.date_added = ToChromeTime(mark.added);
            child.id = id;
            child.name = fullPathList[count];
            Folder LIST = setChild(fullPathList, child, mark, count + 1);
            child.children= LIST;
            return child;
        }            
    }

        class json_root
        {
            public Folder bookmark_bar { get; set; }
            public Folder other { get; set; }
        }

        class json_top
        {
           public string checksum { get { return ""; } }
           public json_root roots { get; set; }
            public int version { get { return 1; } }
        }

        class json_URL : folderAndURL
        {
            public long date_added { get; set; }
            public int id { get; set; }
            public string name { get; set; }
            public string type { get { return "url"; } }
            public string url { get; set; }
        }

    public class Folder
    {
        public object children { get; set; }
        public long date_added { get; set; }
        public long date_modified
        {
            get { return 0; }
        }
        public int id { get; set; }
        public string name { get; set; }
        public string type
        {
            get { return "folder"; }
        }
    }

Chrome がブックマーク ファイルを正しく読み取れるように、出力を入力と一致させるための支援が必要です。

ありがとう!

4

0 に答える 0