🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

最近在 StackOverFlow 解答一個很有趣的問題Json.Net / Newtonsoft: Using JsonConvert.SerializeObject results in weird .Equals calls - why?

問題簡述是:

使用Newtonsoft.Json.JsonConvert.SerializeObject方法 來把物件轉成JSON資料時,為什麼會呼叫物件的Equals 方法 且傳入的object obj類型不是此類別類型,而是屬性的類型

以下是發問者提供的程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class JsonTestClass
{
public string Name { get; set; }
public List<int> MyIntList { get; set; }

public override bool Equals(object obj)
{
if (obj == null)
return false;
JsonTestClass jtc = (JsonTestClass)obj;
return true;
}
}

JsonTestClass c = new JsonTestClass();
c.Name = "test";
c.MyIntList = new List<int>();
c.MyIntList.Add(1);

string json = JsonConvert.SerializeObject(c, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });

問題解析:

看到問題後我就直接去看Json.net原始碼 一探到底原因出在哪邊.

後面發現當我們在呼叫JsonConvert.SerializeObject方法,會執行一個 private bool CheckForCircularReference私有方法.

1
2
3
bool exists = (Serializer._equalityComparer != null)
? _serializeStack.Contains(value, Serializer._equalityComparer)
: _serializeStack.Contains(value);
Read more »

最近在 StackOverFlow 解答一個很有趣的問題Json.Net / Newtonsoft: Using JsonConvert.SerializeObject results in weird .Equals calls - why?

問題簡述是:

使用Newtonsoft.Json.JsonConvert.SerializeObject方法 來把物件轉成JSON資料時,為什麼會呼叫物件的Equals 方法 且傳入的object obj類型不是此類別類型,而是屬性的類型

以下是發問者提供的程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class JsonTestClass
{
public string Name { get; set; }
public List<int> MyIntList { get; set; }

public override bool Equals(object obj)
{
if (obj == null)
return false;
JsonTestClass jtc = (JsonTestClass)obj;
return true;
}
}

JsonTestClass c = new JsonTestClass();
c.Name = "test";
c.MyIntList = new List<int>();
c.MyIntList.Add(1);

string json = JsonConvert.SerializeObject(c, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });

問題解析:

看到問題後我就直接去看Json.net原始碼 一探到底原因出在哪邊.

後面發現當我們在呼叫JsonConvert.SerializeObject方法,會執行一個 private bool CheckForCircularReference私有方法.

1
2
3
bool exists = (Serializer._equalityComparer != null)
? _serializeStack.Contains(value, Serializer._equalityComparer)
: _serializeStack.Contains(value);
Read more »

IOC是一個oop重要的程式設計思想。

學一個技術或思想前我們先了解,這個技術或思想為我們解決怎樣問題。

Ioc—Inversion of Control 控制反轉
控制反轉是一個設計思想 ,把對於某個物件的控制權移轉給第三方容器

簡單解釋

A物件程式內部需要使用B物件 A,B物件中有依賴的成份

控制反轉是把原本A對B控制權移交給第三方容器

降低A對B物件的耦合性,讓雙方都倚賴第三方容器。

  • 反轉概念如下圖

pic

我們可發現有兩點差異

Read more »

某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??

難道只能整個反組譯,查看程式碼翻一份做新的嗎?

不~~其實有辦法直接對於DLL進行修改

只需使用  Reflexil 搭配 ILSpy 或其他支援的反組譯軟體 

Reflexil 是一個組譯編輯器插件目前支援 Reflector, ILSpy 和 Telerik’s JustDecompile.

下載連結

Reflexil Release 2.2 搭配 ILSpy version 3.2 

前置動作,安裝

Reflexil 下載

下載 reflexil.for.ILSpy.2.2.bin.zip,不用下載AIO

Read more »

這一邊有三筆資料

  • U2FsdGVkX19FJsgVyam+Gh2EwmGs4BEJjJJsWxCXHWw84gp3uHvozWsHY8gfAx0C
  • VG9kYXkgaXMgYSBnb29kIERheQ==
  • 046a484a529ecfc7693753ee65802b5cfcafd548252d0e5f1bca845ad2208b91

這三個東西看起來都是亂碼,但所代表含意完全不一樣

這邊會跟大家分享這三個東西特性和差異性

此文同步發布 Blog [淺談] 編碼(encoding) vs 加解密 vs 雜湊(Hash)

前言:

會想分享這篇文章是因為蠻多人把

  • 編碼(encoding)
  • 加解密
  • 雜湊(Hash)

這三個東西搞混,尤其是把編碼當作加密….這是非常危險的事情.

編碼!= 加密 兩個是完全不一樣的東西
編碼!= 加密 兩個是完全不一樣的東西
編碼!= 加密 兩個是完全不一樣的東西
Read more »