2017-02-09 27 views
4

我想用Json.NET序列化一個類。這是我目前所做的。Json.NET - 如何從序列化中排除屬性而無需訪問類

public class AClass 
{ 
    // I don't have access to BClass 
    public BClass b; 
} 

AClass a = new AClass(); 
JsonConvert.SerializeObject(a); 

我無權訪問BClass。我想序列化我的AClass,但我不想序列化BClass的所有屬性,只有其中一些屬性。

我該怎麼做?

+1

看看這個問題的接受的答案:http://stackoverflow.com/questions/13588022/exclude-property-from-serialization-via-custom-attribute-json-net –

回答

7

您可以使用自定義ContractResolverthis library將使其更容易建立。

var propertiesContractResolver = new PropertiesContractResolver(); 
propertiesContractResolver.ExcludeProperties.Add("BClass.Id"); 
var serializerSettings = new JsonSerializerSettings(); 
serializerSettings.ContractResolver = propertiesContractResolver; 
JsonConvert.SerializeObject(a, serializerSettings); 
+0

你必須添加一個依賴項在Nuget包只是爲了不序列化字段? – Bidou

1

夫婦的想法浮現在腦海中,你可以從取決於你需要多少個不同的類別,爲你怎麼高性能所需要的算法是這樣做選擇:

可能是最快的將是使用Json.net的custom convertersContract Resolvers並建立一個適合您的需要,即忽略你不想包括的屬性。

另一種方法是將此類映射到另一個類似定義的類,該類僅包含不想包含的屬性,然後序列化該類。您可以使用AutoMapper在類似定義的類之間進行快速映射。

最後,您可以創建ExpandoObject(或甚至Dictionary<string, object>)並添加要包含在Expando或Dictionary中的屬性(並且您可以手動或通過反射等方式複製這些屬性/鍵值對),然後序列化該對象/字典。

相關問題