Servicestack SendAll工作正常,但发送错误

时间:2019-09-03 08:05:19

标签: c# servicestack

我正在发送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; }
}

1 个答案:

答案 0 :(得分:1)

错误表明CSV格式不符合CsvSerializer的要求,例如尝试在CSV中反序列化JSON时会收到此错误。

CsvSerializer.Deserialize* API应该反序列化的唯一文本是最初使用CsvSerializer进行序列化的CSV。它应该能够反序列化简单的通用CSV文件,但是当您具有任何复杂的类型(CSV不支持)时,它会期望CsvSerializer生成的有用输出。