在对接中我们最常接触到的数据格式为Json和XML,往往我们会用Newtonsoft和XmlSerializer进行反序列化成对象,从而能够使劲造。写得多了,总想搞点通用的玩意儿,不知道这是不是程序员的通病。下面分享一个通用的Json或XML反序列化函数。
首先咱先扩展一下String类:
namespace System
{
public static class StringExtensions
{
public static bool IsJson(this string payload)
{
var pl = payload.Trim();
return pl.StartsWith("{") && pl.EndsWith("}") ||
pl.StartsWith("[") && pl.EndsWith("]");
}
public static bool IsXml(this string payload)
{
var pl = payload.Trim();
return pl.StartsWith("<") && pl.EndsWith(">");
}
}
}
然后再去写目标函数:
private T getData<T>(string payload)
{
if (payload.IsJson())
{
return JsonConvert.DeserializeObject<T>(payload);
}
else
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new MemoryStream(payload));
}
}
应用时,只需要传入对象和字符串即可。
var so = getData<SalesOrder>(payload);
实属班门弄斧不自量,权作抛砖引玉撩一笑。