आप जो करना चाहते हैं उसे करने के लिए आप CustomCreationConverter बना सकते हैं। यहां एक नमूना है (बल्कि बदसूरत है, लेकिन यह दर्शाता है कि आप इसके बारे में कैसे जाना चाहते हैं):
namespace JsonConverterTest1
{
public class Mapped
{
private Dictionary<string, object> _theRest = new Dictionary<string, object>();
public int One { get; set; }
public int Two { get; set; }
public Dictionary<string, object> TheRest { get { return _theRest; } }
}
public class MappedConverter : CustomCreationConverter<Mapped>
{
public override Mapped Create(Type objectType)
{
return new Mapped();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var mappedObj = new Mapped();
var objProps = objectType.GetProperties().Select(p => p.Name.ToLower()).ToArray();
//return base.ReadJson(reader, objectType, existingValue, serializer);
while (reader.Read())
{
if (reader.TokenType == JsonToken.PropertyName)
{
string readerValue = reader.Value.ToString().ToLower();
if (reader.Read())
{
if (objProps.Contains(readerValue))
{
PropertyInfo pi = mappedObj.GetType().GetProperty(readerValue, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var convertedValue = Convert.ChangeType(reader.Value, pi.PropertyType);
pi.SetValue(mappedObj, convertedValue, null);
}
else
{
mappedObj.TheRest.Add(readerValue, reader.Value);
}
}
}
}
return mappedObj;
}
}
public class Program
{
static void Main(string[] args)
{
string json = "{'one':1, 'two':2, 'three':3, 'four':4}";
Mapped mappedObj = JsonConvert.DeserializeObject<Mapped>(json, new MappedConverter());
Console.WriteLine(mappedObj.TheRest["three"].ToString());
Console.WriteLine(mappedObj.TheRest["four"].ToString());
}
}
}
तो mappedObj के उत्पादन के बाद आप deserialize JSON स्ट्रिंग आबादी अपनी One
और Two
गुणों के साथ एक वस्तु हो जाएगा, और सब कुछ किसी और Dictionary
में डाल दिया। अनुमोदित, मैंने एक और दो मानों को int
के रूप में हार्ड-कोड किया, लेकिन मुझे लगता है कि यह दर्शाता है कि आप इसके बारे में कैसे जाएंगे।
मुझे उम्मीद है कि इससे मदद मिलती है।
संपादित करें: मैंने इसे अधिक सामान्य बनाने के लिए कोड अपडेट किया। मैंने पूरी तरह से इसका परीक्षण नहीं किया, इसलिए कुछ मामलों में यह असफल हो सकता है, लेकिन मुझे लगता है कि यह आपको वहां से अधिकतर तरीके से प्राप्त करता है।
स्रोत
2011-07-26 13:06:06
मेरा उत्तर में कोड अपडेट किया गया यह अधिक सामान्य बनाने के लिए। –