這裏是我的JSON:如何使用Json.net使用自定義綁定/映射填充模型?
{
"macAddress": "000A959D6816",
"softwareVersion": "1.2.1.5-UnnecessaryInfo",
"lastUpdated": "2015-04-03 20:46:40.375 -0500",
"charging": true
}
而且使用Json.NET,我可以做在C#中的以下內容:
namespace JsonTest
{
public class Tablet
{
public string MacAddress { get; set; }
public string SoftwareVersion { get; set; }
public DateTime LastUpdated { get; set; }
public bool Charging { get; set; }
}
public class TestClass
{
public void Test()
{
var json = "{ ... }"; // filled in with JSON info from above
var model = new Tablet();
try
{
JsonConvert.PopulateObject(json, model);
}
catch (JsonSerializationException ex)
{
Console.WriteLine(ex);
}
}
}
}
到目前爲止,一切都很好。我在這裏的代碼效果很好。它用來自Json的所有數據填充我的模型對象。但是,我並不真的希望我的模型的SoftwareVersion
屬性是一個字符串;我寧願讓它成爲System.Version課程的一個實例。換句話說,我希望我的Tablet
類看上去就像這樣:
public class Tablet
{
public string MacAddress { get; set; }
public Version SoftwareVersion { get; set; }
public DateTime LastUpdated { get; set; }
public bool Charging { get; set; }
}
我不關心這個大幹快上該版本字符串末尾附加不必要的信息,所以我想編寫一些mapper/binder類來檢查Json的版本字符串,去除不必要的信息,然後在繼續填充模型之前將該字段解析爲Version
對象。我做知道如何寫個人解析方法;這將這樣的伎倆:
private static Version ParseVersion(object versionObj)
{
var pattern = new Regex(@"^[\d.]+");
var versionString = versionObj.ToString();
if (!pattern.IsMatch(versionString)) return null;
var match = pattern.Match(versionString);
versionString = match.Groups[0].ToString();
Version version;
Version.TryParse(versionString, out version);
return version;
}
什麼我不知道是在哪裏以及如何在JsonConvert過程「插入這」。我看到PopulateObject
採用了可選的JsonSerializerSettings參數,並且又有幾個不同的對象初始化參數,如Binder和Converters。但我不確定要使用哪一個,也不知道如何寫這些類來做我在這裏描述的內容。我該怎麼做? Binder和Converter之間有什麼區別?
漂亮!非常感謝! – SoaperGEM 2015-04-03 23:06:56