none
關於windows form的Json問題 RRS feed

  • 一般討論

  • 各位大大們,小弟最近在研究windows form的json,由於原本找到很多相關的第三方json(cjson、json-c),

    但是礙於怕後續如果規定無法參考外部dll,那就會造成許多問題,所以索性還是先研究關於MS的Json,

    小弟在研究DataContractJsonSerializer的時候,發覺這個主題都是針對C#,我在windows form怎麼用都會出問題

    以下為發生的問題

    DataContractJsonSerializer ser = gcnew DataContractJsonSerializer(person->GetType());

    Person是我自己建的Class 我Gettpye後應該是符合這個需求了,但是在編譯的時候會發生

    錯誤 19 error C2664: 'System::Runtime::Serialization::Json::DataContractJsonSerializer::DataContractJsonSerializer(System::Type ^)' : 無法將參數 1 從 'System::Runtime::Serialization::Json::DataContractJsonSerializer ^' 轉換成 'System::Type ^'

    一直找不到為什麼我明明已經丟型態進去了他為啥還是說我的參數是DataContractJsonSerializer 

    但這個問題我在C#上面就沒發生過(同樣的程式碼),是想問一下這個類別是windows form沒辦法用嗎?還是我有做錯的地方?


    2015年11月10日 上午 07:11

所有回覆

  • 以下是原始碼

    public ref class Person
    {
    public:
    System::String^ FirstName;
    System::String^ LastName;
    int ID;

    Person(System::String^ newfName, System::String^ newLName, int newID)
    {
    FirstName = newfName;
    LastName = newLName;
    ID = newID;
    }
    };

    System::Void Form1::Form1_Load(System::Object^  sender, System::EventArgs^  e) 
    {

    Person^ person = gcnew Person("Andy","test",96);
    DataContractJsonSerializer ser = gcnew DataContractJsonSerializer(person->GetType());

    }

    2015年11月10日 上午 07:13
  • 使用 DataContractJsonSerializer 的話, 資料類別需要加上 DataContractAttribute, 類別類的屬性要加上 DataMemberAttribute

    關於此項, 可以參考 HOW TO:序列化及還原序列化 JSON 資料

    另外一種方式, JsonObject, 可以不需要資料契約, 可以參考以下幾個網頁

    Working with JSON Data

    使用 JavaScript 物件標記法 (JSON) (使用 C++、C# 或 Visual Basic 的 Windows 執行階段應用程式)

    如果要使用第三方函式庫, 一般我們推薦 NewtonSoft Json.Net (這是一個 Nuget 套件, 可以直接用 Visual Studio 的 Nuget 管理員安裝)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年11月10日 上午 10:45
    版主
  • 這一行:

    DataContractJsonSerializer ser = gcnew DataContractJsonSerializer(person->GetType());

    要寫成這樣:

    DataContractJsonSerializer ^ser = gcnew DataContractJsonSerializer(person->GetType());

    2015年11月11日 上午 03:08