1

Excel のカスタム アドインに取り組んでいます。リモート Web サービスからプロジェクトのリストを取得したいと考えています。JSON は Web サービスから Excel に返されますが、JSON を C# のオブジェクトに変換するのに問題があります。

アドイン コードは次のとおりです。

using Microsoft.Office.Tools.Ribbon;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Web;

namespace TestAddIn
{
    class Project
    {
        static string currentProject;
        static List<Project> validProjects;

        public int id { get; set; }
        public string name { get; set; }
        public int svar_reserved_space { get; set; }

        // Set the current project we're working on
        internal static void setCurrentProject(string path)
        {
            Match match = Regex.Match(path, @"^[A-Za-z]:\\(\w+)");

            Project.currentProject = match.Groups[1].Value;

            foreach (Project validProject in validProjects)
            {
                RibbonDropDownItem dropDown = Globals.Ribbons.Ribbon1.Factory.CreateRibbonDropDownItem();

                dropDown.Label = validProject.name;

                if (validProject.name.Equals(Project.currentProject))
                {
                    Globals.Ribbons.Ribbon1.projectComboBox.Items.Add(dropDown);
                }
            }
        }

        // Connect to a web service and get a list of valid projects
        internal static void getValidProjects()
        {
            string url = "http://192.168.118.128/projects/json";

            WebRequest webRequest;
            webRequest = WebRequest.Create(url);

            Stream objStream;
            objStream = webRequest.GetResponse().GetResponseStream();

            StreamReader objReader = new StreamReader(objStream);

            string sLine = objReader.ReadLine();

            Debug.WriteLine("begin: " + sLine);

            validProjects = JsonConvert.DeserializeObject<List<Project>>(sLine);

            Debug.WriteLine("end");
        }
    }
}

このjsonを使用する場合:

[{"Project":{"id":1,"name":"test1","svar_reserved_space":2}},{"Project":{"id":2,"name":"test2","svar_reserved_space":0}}]

validProjects で 2 つの Project オブジェクトを取得しましたが、id と svar_reserver_space が 0 で、名前が null です。考え?

4

2 に答える 2

1

これは、いくつかのアドイン/nuget マジックを使用すると最も簡単です。

そして、このコードを使用してください:

WebClient wc = new WebClient();
string json = wc.DownloadString("http://192.168.118.128/projects/json");
var a = JsonConvert.DeserializeObject<YourGeneratedMainClass>(json);

YourGeneratedMainClassjsonをクラスとして貼り付けて生成されたクラスはどこにありますか。

上記の方法を使用すると、おそらく親オブジェクトがあることがわかります

public class Project
{
    public int id { get; set; }
    public string name { get; set; }
    public int svar_reserved_space { get; set; }
}

public class Parent
{
    public Project Project { get; set; }
}

詳細については、次の 2 つの SO の質問をご覧ください。

Json.netは、c# .net 2.0のオブジェクトのリストに逆シリアル化します

逆シリアル化されたオブジェクトのすべての値が Null に設定されている

于 2012-11-02T15:32:18.833 に答える
1

次のような JSON が必要だと思います。

[{"id":1,"name":"test1","svar_reserved_space":2},{"id":2,"name":"test2","svar_reserved_space":0}]

デフォルトの Json デシリアライゼーションを使用するため。

于 2012-11-02T15:47:07.693 に答える