SmartFormat序列化字典的最佳方式



我有一个带有字典的数据对象。现在我要将这个字典序列化为json字符串。有可能在模板内做到这一点吗?

public string GenerateTest()
{
Dictionary<string, object> dataDictionary = new Dictionary<string, object>();
dataDictionary.Add("Testdata1", "Value1");
dataDictionary.Add("Testdata2", "Value2");

string result = Smart.Format(CultureInfo.InvariantCulture, "{data.someFormattertoGetAnJsonString}", new {data= dataDictionary });
Console.WriteLine(result);
return result;
}

我已经附上了我的解决方案。你必须用AddExtensions方法注册ToJSONFormatter。之后你可以这样调用它:{MyVariable:ToJSON()}

Smart.Default.AddExtensions(new ToJSONFormatter());

public class ToJSONFormatter : IFormatter
{
public string Name { get; set; } = "ToJSON";
public bool CanAutoDetect { get; set; } = false;
private JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings { DateFormatString = "yyyy-MM-ddTHH:mm:ss" };
//{Data:ToJSON()}
public bool TryEvaluateFormat(IFormattingInfo formattingInfo)
{
formattingInfo.Write(JsonConvert.SerializeObject(formattingInfo.CurrentValue));
return true;
}
}

当然可以这样做,但不要用一般的方式。SmartFormat是一个格式化器,而不是序列化器。所以一般来说,SmartFormat最适合在文本模板中填充数据,就像邮件合并所需要的那样。

在您的情况下,您最好使用像System.Text.Json或Newtonsoft.Json这样的序列化器。对于后者,这里有一个简单的示例:https://www.newtonsoft.com/json/help/html/serializedictionary.htm

最新更新