我想知道如何使用Json.NET庫排除/剝離給定類型(或其集合)的某些屬性被序列化爲? 我試圖寫我自己的合同解析器(繼承自DefaultContractResolver),但沒有運氣。JSON.NET - 在運行時排除特定類型的屬性
我知道我可以使用DataAnnotations來完成,與裝飾排除性能ScriptIgnoreAttribute,但它並不適用在我的情況。序列化的對象幾乎可以是任何東西,所以我不知道在設計時要排除哪些屬性。我知道只有類型屬性不應該序列化。
它看起來像一個相當簡單的任務,但不幸的是我找不到任何地方一個體面的解決辦法...
BTW - 我不是必然Json.NET庫 - 如果它可以很容易地使用默認的/其他的.NET JSON序列化器,這對我來說也是一個很好的解決方案。
UPDATE
性能有試圖序列之前被排除在外。爲什麼?
基本上,我正在接收的對象的類型和序列化可以具有從IDynamicMetaObjectProvider繼承的類型的動態屬性。我不打算來描述所有的細節,但DynamicMetaObject從GetMetaObject這些對象的方法返回沒有DynamicMetaObject.GetDynamicMemberNames方法來實現(拋出NotImplementedException ...)。 總結 - 問題是那些對象(我需要排除)不允許枚舉它們的屬性,Json.NET串行器在後臺嘗試做什麼。我總是以結束NotImplementedException被拋出。
因此,要澄清,你想排除序列化屬性的值實現IDynamicMetaObjectProvider?我對動態類型非常熟悉,但我不確定你的實際序列化。這聽起來像是序列化普通類,並希望排除引用動態實例的某些屬性。同時你還表示你不知道正在序列化的項目的類型或基本類型 - 只是偶爾會引用動態的屬性而不能序列化。請發佈一個簡單的例子。 – 2011-05-27 17:27:30
沒錯!我正在序列化的根對象可以是任何東西,但有時它可能有一個動態屬性(它引用一些IDynamicMetaObjectProvider對象或一些集合),我想從序列化中排除它。序列化對象不是動態的,只有排除的屬性是。 – 2011-05-27 17:37:18
是否足以滿足您的需要,而不是完全排除這些屬性,而是將它們序列化爲空對象?因此,一個名爲Foo的屬性,它的實例是動態的,它將被序列化爲Foo:{} – 2011-05-27 18:42:46