我正在发送CSV并反序列化。
List<CompanyService> responseX;
using (var reader = new StreamReader(files[0].InputStream))
{
// convert stream to string
string text = reader.ReadToEnd();
List<InsertCompany> deserializeFromString = ServiceStack.Text.CsvSerializer.DeserializeFromString<List<InsertCompany>>(text);
responseX = Gateway.SendAll<CompanyService>(deserializeFromString);
}
/// <summary>
/// To insert the company
/// </summary>
/// <returns></returns>
public long Post(InsertCompany request)
{
var company = request.ConvertTo<Company>();
company.AuditId = UserAuth.Id;
var result = Db.Insert<Company>(company, selectIdentity: true);
//History
CreateCompanyHistory(result, "INSERT", UserAuth.Id);
//See the SQL that was generated
//var lastSql = Db.GetLastSql();
return result;
}
当我调用Sendall时,它将调用CompanyService并处理所有列表,然后发回错误。但是记录将保存在数据库中。错误= System.Runtime.Serialization.SerializationException: 'Type definitions should start with a '{', expecting serialized type 'CompanyService', got string starting with: 71'
另一方面,我找不到关于ServiceStack.Text.CsvSerializer.DeserializeFromString
的任何文档编辑-
我的CSV清晰性
CompanyName,ParentCompanyId,City,Country,Email,Phone,Address1,Address2,Latitude,Longitude
Sub Company 8A,8,,,a@c.n,,dfg,,0,0
Sub Company 8B,8,,,W@RF.COM,7777,f,,0,0
Sub Company 8C,8,,,a@c.com,7777,d,,0,0
Sub Company 8D,8,,,abc@gmail.com,7777,2,,0,0
Sub Company 8E,8,,,abc@gmail.com,7777,2,,0,0
Sub Company 8F,8,,,abc@gmail.com,7777,2,,0,0
-编辑2
这些是我使用ST编写的第一个API。我忘了修改它们以使用正确的返回类型。这就是我一直使用的,切换到它可以解决该错误。
public class ResponseList : IResponseItemList
{
public List<dynamic> Result { get; set; }
}
public interface IResponseItemList
{
List<dynamic> Result { get; set; }
}
public class Response : IResponseItem
{
public dynamic Result { get; set; }
}
public interface IResponseItem
{
dynamic Result { get; set; }
}
答案 0 :(得分:1)
错误表明CSV格式不符合CsvSerializer
的要求,例如尝试在CSV中反序列化JSON时会收到此错误。
CsvSerializer.Deserialize*
API应该反序列化的唯一文本是最初使用CsvSerializer
进行序列化的CSV。它应该能够反序列化简单的通用CSV文件,但是当您具有任何复杂的类型(CSV不支持)时,它会期望CsvSerializer
生成的有用输出。