您可以通過定製JsonConverter
類來實現此目的。也許是這樣的:
class ElasticObjectConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ElasticObject));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
ElasticObject eobj = (ElasticObject)value;
var temp = new Dictionary<string, object>(eobj);
temp.Add("Id", eobj.Id);
serializer.Serialize(writer, temp);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var temp = serializer.Deserialize<Dictionary<string, object>>(reader);
ElasticObject eobj = new ElasticObject();
foreach (string key in temp.Keys)
{
if (key == "Id")
eobj.Id = Convert.ToInt32(temp[key]);
else
eobj.Add(key, temp[key]);
}
return eobj;
}
}
你會再使用這樣的:
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Converters = new List<JsonConverter> { new ElasticObjectConverter() }
};
var keyValues = new ElasticObject();
keyValues.Id = 200000;
keyValues.Add("Price", 12.5);
var json = JsonConvert.SerializeObject(keyValues, settings);
的JSON通過上文中所製造是這樣的:
{"Price":12.5,"Id":200000}
這是你是什麼尋找?
請注意:因爲JSON.NET會[繞過你的制定者和直接設置「基礎」字典](http://www.newtonsoft.com/json/help/html/SerializationGuide.htm#Dictionarys)它不會'強類型'的值,所以如果你的任何屬性是類,最終會成爲'JArrays'或'JObject'。正如你已經指出的那樣,你基本上必須在每個吸氣器中「反序列化」它,這並不理想。 – drzaus