首页 > 解决方案 > Servicestack SendAll 正在工作,但发送错误

问题描述

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

标签: c#servicestack

解决方案


该错误表明 CSV 不是CsvSerializer预期的格式,例如,当您尝试反序列化 CSV 中的 JSON 时会收到此错误。

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


推荐阅读