ServiceStack.IEnumerable的文本CSV序列化<;对象>;忽略自定义序列化函数
首先,请原谅这里的新手错误——我恐怕不是一个普通的海报 现在让我们来谈谈本质 我正在尝试使用ServiceStack.Text将对象序列化为CSV。如果我保持简单,那么在序列化已知类型的对象时,一切都会按预期进行 但是,我想序列化许多对象,并且我不知道运行时的类型,因此我正在编写一个可重用组件,其中所有数据都被视为ServiceStack.IEnumerable的文本CSV序列化<;对象>;忽略自定义序列化函数,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,首先,请原谅这里的新手错误——我恐怕不是一个普通的海报 现在让我们来谈谈本质 我正在尝试使用ServiceStack.Text将对象序列化为CSV。如果我保持简单,那么在序列化已知类型的对象时,一切都会按预期进行 但是,我想序列化许多对象,并且我不知道运行时的类型,因此我正在编写一个可重用组件,其中所有数据都被视为System.Object。我们已经为Json序列化执行了相同的例程,没有任何问题。但是CsvSerializer在序列化过程中处理对象的方式似乎有所不同 示例代码 到目前为止,我还没
System.Object
。我们已经为Json序列化执行了相同的例程,没有任何问题。但是CsvSerializer
在序列化过程中处理对象的方式似乎有所不同
示例代码
到目前为止,我还没有遇到这个更改的问题,尽管有人可能不希望在return语句之前分配一个新的中间变量
希望这是足够的信息,所以我的问题
提前感谢。@mythz。。。您知道如何为ServiceStack.Text运行NUnit测试吗?VS2017中的NUnit 3测试适配器扩展无法加载测试-可能是由于新的项目格式?测试资源管理器中显示的唯一测试是ServiceStack.Text.Tests.xUnit中的单个测试。您可以使用R#NUnit测试运行程序,因为它们有一个。您还可以使用ServiceStack.Text.tests.dllCheers上的运行测试,该更改可从现在的v4.5.13+版本中获得
public void TestIEnumerableObjectSerialization()
{
var data = GenerateSampleData();
JsConfig<DateTime>.SerializeFn =
time => new DateTime(time.Ticks, DateTimeKind.Utc).ToString("yyyy-MM-dd HH:mm:ss");
var csv = CsvSerializer.SerializeToCsv(data);
Console.WriteLine(csv);
Assert.Equal("DateTime\r\n"
+ "2017-06-14 00:00:00\r\n"
+ "2017-01-31 01:23:45\r\n",
csv);
}
object[] GenerateSampleData()
{
return new object[] {
new POCO
{
DateTime = new DateTime(2017,6,14)
},
new POCO
{
DateTime = new DateTime(2017,1,31, 01, 23, 45)
}
};
}
public class POCO
{
public DateTime DateTime { get; set; }
}
public static object ToCsvField(this object text)
{
var textSerialized = TypeSerializer.SerializeToString(text).StripQuotes();
return textSerialized == null || !CsvWriter.HasAnyEscapeChars(textSerialized)
? textSerialized
: string.Concat
(
CsvConfig.ItemDelimiterString,
textSerialized.Replace(CsvConfig.ItemDelimiterString, CsvConfig.EscapedItemDelimiterString),
CsvConfig.ItemDelimiterString
);
}