Newtonsoft.Json 修改記錄
Newtonsoft.Json 修改記錄
1.Newtonsoft.Json 可以反序列 但不能反序列化 KeyValuePaire<TKey,TValue> , 是因為:
KeyValuePaire 的兩個屬性 Key , Value 都是隻讀的.且,沒有預設建構函式.
在檔案:Newtonsoft.Json\Newtonsoft.Json\Utilities\ReflectionUtils.cs 裡有一個函式:HasDefaultConstructor 作者的判斷裡有: 只要是值型別,就會有預設建構函式. 這是不對的.
去掉 下面這兩句:
if (t.IsValueType)
return true;
2.對於 具有屬性 (Attribute) Browsable = false 是不用序列化的.
\Utilities\ReflectionUtils.cs (GetFieldsAndProperties 487行後新增)
程式碼
for (int i = 0; i < targetMembers.Count; i++) { MemberInfo member = targetMembers[i]; object[] objs = member.GetCustomAttributes(typeof(BrowsableAttribute), true); if (objs != null && objs.Length > 0)
{ if ((objs[0] as BrowsableAttribute).Browsable == false) { targetMembers.RemoveAt(i); i--; } } }
3. DateTime序列化錯誤:
\JsonWriter.cs (WriteValue) 修改 1036行
程式碼
case TypeCode.DateTime: string dtValue = ""; DateTime? dt = convertible as DateTime?; if (dt.HasValue == false) { return; } if (dt.Value.Hour == 0 && dt.Value.Minute == 0 && dt.Value.Second
== 0) { dtValue = dt.Value.ToShortDateString(); } else if (dt.Value.Year == 0 && dt.Value.Month == 0 && dt.Value.Day == 0) { dtValue = dt.Value.ToShortTimeString(); }
else dtValue = dt.Value.ToString(); WriteValue(dtValue); return;
4.迴圈引用自己的問題。
\JsonSerializer.cs (WriteMemberInfoProperty) 838 行: 修改
case ReferenceLoopHandling.Error:
return;
再狠點:\JsonSerializer.cs (SerializeObject) 879 行。 新增:
if (writer.SerializeStack.Count > 0 && writer.SerializeStack[0].GetType() == value.GetType()) return;
會生成:帶有屬性名和空值的自迴圈體。
相關文章
- MyBatis 批次修改記錄MyBatis
- Git的修改提交記錄和變基Git
- Oracle存在修改,不存在插入記錄Oracle
- 如何修改git已提交記錄的郵箱?Git
- 修改Kali Linux終端歷史記錄大小Linux
- 獲取當前修改的行記錄資料
- BottomNavigationView的通用修改記錄(新解決方案)NavigationView
- 欄位修改記錄操作日誌的實現
- 記錄--如何修改第三方npm包?NPM
- git 修改之前提交記錄的某幾次記錄的賬號和郵箱Git
- magento 2.4 windows平臺需要修改程式碼記錄Windows
- 記錄一次mysql批量修改大量資料MySql
- Linux下修改系統編碼的操作記錄Linux
- 記錄一下新建linux修改流程詳細Linux
- vue-cli 如何修改或刪除預設preset記錄Vue
- [20140624]bbed修改資料記錄.txt
- 依據oracheck結果修改系統引數配置記錄
- 通過修改CATALOG記錄的方式實現備份集目錄變更
- mac修改gopath目錄MacGo
- 記錄一次誤刪操作,分享使用 Git 撤銷修改Git
- GBase XDM(單機/分片叢集)資料庫修改記錄資料庫
- Git提交錯了不用慌,這三招幫你修改記錄Git
- 記錄多專案共用一個公眾號邏輯修改
- [20160526]bbed修改資料記錄(不等長).txt
- Camstar MDB setfieldex 修改建模欄位不記錄Audit TrailAI
- Newtonsoft.Json的使用JSON
- PUTTY 記錄操作記錄
- 域名解析的記錄型別:A記錄、CNAME、MX記錄、NS記錄型別
- GitBash初始目錄的修改Git
- jenkins修改主目錄Jenkins
- TestComplete資料驅動測試教程(三)——修改記錄測試
- history.pushState() 給網站新增和修改瀏覽歷史記錄網站
- mysql誤修改全表記錄,使用binlog日誌找回資料MySql
- [20140624]bbed修改資料記錄(不等長).txt
- Cookie記錄瀏覽記錄Cookie
- Newtonsoft.Json高階用法JSON
- Newtonsoft.Json的使用整理JSON
- 記錄首次修改vue-element-admin遇到的一些問題Vue