我使用JSON.NET序列化我的一些對象,我想知道是否有一種簡單的方法來覆蓋默認的json.net轉換器僅適用於特定對象?在JSON.NET中的特定對象的自定義轉換
目前,我有以下類:
public class ChannelContext : IDataContext
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<INewsItem> Items { get; set; }
}
JSON.NET目前連載以上,如:
{
"Id": 2,
"Name": "name value",
"Items": [ item_data_here ]
}
是否有可能只是針對特定類這種方式格式而不是:
"Id_2":
{
"Name": "name value",
"Items": [ item data here ]
}
我有點新JSON.NET ..我想知道如果上述有東西給d o編寫一個自定義轉換器。我無法找到關於如何寫一個的具體示例,如果任何人都可以指出我的具體來源,我會非常感激。
我需要找到一個解決方案,使特定的類總是轉換相同的,因爲上述上下文是JSON.NET默認轉換器轉換的更大上下文的一部分。
希望我的問題是不夠清楚......
UPDATE:
我已經找到了如何創建新的自定義轉換器(通過創建一個新的類,從JsonConverter繼承並重寫它的抽象方法),我重寫了WriteJson方法如下:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
ChannelContext contextObj = value as ChannelContext;
writer.WriteStartObject();
writer.WritePropertyName("id_" + contextObj.Id);
writer.WriteStartObject();
writer.WritePropertyName("Name");
serializer.Serialize(writer, contextObj.Name);
writer.WritePropertyName("Items");
serializer.Serialize(writer, contextObj.Items);
writer.WriteEndObject();
writer.WriteEndObject();
}
這確實成功地做這項工作,但是...... 我好奇,如果有序列化的R A方式通過重用默認的JsonSerializer(或轉換器)來代替使用jsonwriter方法手動「編寫」對象的對象屬性的est。
更新2: 我試圖得到一個更通用的解決方案,並提出了以下幾點:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteStartObject();
// Write associative array field name
writer.WritePropertyName(m_FieldNameResolver.ResolveFieldName(value));
// Remove this converter from serializer converters collection
serializer.Converters.Remove(this);
// Serialize the object data using the rest of the converters
serializer.Serialize(writer, value);
writer.WriteEndObject();
}
手動添加轉換器時,串行,這樣也能正常工作:
jsonSerializer.Converters.Add(new AssociativeArraysConverter<DefaultFieldNameResolver>());
jsonSerializer.Serialize(writer, channelContextObj);
但使用[JsonConverter()]時不工作屬性設置到ChannelContext類上述我的自定義coverter因爲執行當發生自參考循環的:
serializer.Serialize(writer, value)
這顯然是因爲我的自定義轉換器目前被認爲是類的默認轉換器一旦設置與JsonConverterAttribute,所以我得到一個inifinite循環。 爲了解決這個問題,我唯一能想到的就是繼承自一個基本的jsonconverter類,然後調用base.serialize()方法... 但是這樣的JsonConverter類是否存在?
非常感謝!
米奇
1爲尋找解決方案。 –