标签: servicestack-text

什么是JSON.NET转换器的ServiceStack.Text等价物,例如当应用于NodaTime类型时?

如何NodaTime.LocalDateTime使用ServiceStack.Text 控制自定义类型(例如)的序列化/反序列化?

Json.NET Converters 为此提供了这一功能,因此每次类包含自定义类型时,都将使用相应的自定义序列化器/反序列化器.例如,可以使用自定义方法将字符串NodaTime.LocalDateTime的属性转换为字符串.

在db4o中,IObjectConstructor将作为类似的转换层在保持类型之前将类型转换为另一个类型(LocalDateTime可以转换为DateTime).

c# serialization servicestack nodatime servicestack-text

5
推荐指数
1
解决办法
308
查看次数

使用ServiceStack.Text将Json反序列化为动态对象

我正在使用ServiceStack.Text将 json 反序列化为动态对象。

我在尝试反序列化以下 json 时遇到错误:

{
  "responseHeader":{
    "status":0,
    "QTime":3,
    "params":{
      "q":"*:*",
      "indent":"true",
      "wt":"json"}},
  "response":{"numFound":1,"start":0,"docs":[
      {
        "id":"1",
        "title":["test"],
        "_version_":1480260331707039744}]
  }}
Run Code Online (Sandbox Code Playgroud)

上面的 json 是一个字符串,这就是我尝试反序列化它的方式:

DynamicJson dyn = DynamicJson.Deserialize(json);    
var response = dyn.response;
Run Code Online (Sandbox Code Playgroud)

但我收到一条错误消息:dyn 不包含“响应”的定义


dynServiceStack.DynamicJson确实返回具有以下值的类型(来自调试器):

{"response_header":"{\n    \"status\":0,\n    \"QTime\":0,\n    \"params\":{\n      \"q\":\"*:*\",\n      \"size\":\"0\",\n      \"indent\":\"True\",\n      \"start\":\"0\",\n      \"wt\":\"json\",\n      \"return-fields\":\"\"}}","response":"{\"numFound\":1,\"start\":0,\"docs\":[\n      {\n        \"id\":\"1\",\n        \"title\":[\"test\"],\n        \"_version_\":1480260331707039744}]\n  }"}    ServiceStack.DynamicJson
Run Code Online (Sandbox Code Playgroud)

根据这里的答案:Using ServiceStack.Text to deserialize a json string to object这就是它的完成方式,但我在这里做错了什么?

c# asp.net asp.net-mvc servicestack-text

4
推荐指数
1
解决办法
1985
查看次数

ServiceStack JSON序列化为dotnet核心的小写?

我正在使用ServiceStack来运行REST API,并且遇到了序列化响应对象的问题.更具体地说,当我调用JsonSerializer.SerializeToString(.)响应对象时,所有属性名称都以小写形式序列化.我试过摆弄params,JsConfig.EmitCamelCaseNames但这没有用.有任何想法吗?

请参阅下面的ServiceStack版本信息和屏幕截图.

"ServiceStack.Core": "1.0.32",
"ServiceStack.Kestrel": "1.0.32",
Run Code Online (Sandbox Code Playgroud)

要序列化的响应对象: 对象定义

序列化字符串: 序列化字符串

我相信这是针对dotnet核心的,因为这本来是一个.NET应用程序,我已经迁移到dotnet核心.我之前的应用程序版本中从未见过这个问题.我知道我可以使用本机序列化器,但我认为ServiceStack速度更快(如果我错了请告诉我).

c# serialization servicestack servicestack-text .net-core

4
推荐指数
2
解决办法
1014
查看次数

如何停止ServiceStack 3.9.71 NuGet包安装ServiceStack.Text 4.0.24?

我有一个使用ServiceStack的项目; 我们运行旧的3.9.x代码库而不是升级到4.x,因为ServiceStack 4需要商业许可证.

我自己的API客户端在.nuspec文件中定义了依赖关系,如下所示:

<dependencies>
  <dependency id="DotNetOpenAuth.OAuth2.Client" version="[4.3,5)" />
  <dependency id="log4net" version="[2.0,2.1)" />
  <dependency id="ServiceStack" version="[3.9.71,4)" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)

问题是 - ServiceStack包依赖于ServiceStack框架的各个其他位,安装ServiceStack 3.9.71正在将ServiceStack.Text v4.0.24 安装到我的项目中.它确实弹出了需要许可证接受的对话框,这让我想到了一些奇怪的事情 - 但是没有为其他所需的ServiceStack组件手动定义我自己的依赖项,我怎样才能确保我不会结束在我的项目中使用未经许可的ServiceStack 4.x?

licensing nuget servicestack servicestack-text nuget-package-restore

3
推荐指数
1
解决办法
847
查看次数

如何将JavaScript对象(JSON)转换为JSV格式?

我希望在向我的ServiceStack服务发送ajax请求时使用JSV而不是JSON来节省带宽.

我有以下JSON数据:

[{"201":"New York","022":"Chicago"}]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为以下JSV格式:

[{201:New York,022:Chicago}]
Run Code Online (Sandbox Code Playgroud)

有办法简单地做到这一点吗?我不确定处理它的最佳方法是什么; 但根据我的知识/理解,我需要使用:(冒号)和,(逗号)拆分字符串,并需要循环它.但我担心这不会导致角色逃脱.是否有可用于解析JSV格式的官方JavaScript库 - 我找不到一个?

javascript json servicestack servicestack-text

3
推荐指数
1
解决办法
1797
查看次数

ServiceStack异常序列化行为

免责声明:我对ServiceStack很新

鉴于以下服务:

public class TestService : Service
{
    public TestResponse Get(Test request)
    {
        if (String.IsNullOrEmpty(request.Message))
            throw new ArgumentException("Message is required");

        return new TestResponse();
    }
}
Run Code Online (Sandbox Code Playgroud)

和以下请求/响应DTO:

[Route("/test", "GET")]
public class Test : IReturn<TestResponse>
{
    public string Message { get; set; }
}

public class TestResponse
{
    public IList<Test> TestList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试访问/测试时,我希望得到以下响应:

{
    "responseStatus": {
        "errorCode": "ArgumentException",
        "message": "Message is required",
        "errors": []
    }
}
Run Code Online (Sandbox Code Playgroud)

相反,我得到一个空的JSON响应.然而,它返回正确的状态代码(400 Bad Request).

我认为在ServiceStack中使用Something然后SomethingResponse以这种方式命名您的DTO是很常见的.为了让它将异常作为序列化的ResponseStatus对象返回,我发现我可以将我的请求DTO从Test重命名为TestRequest和/或在我的响应DTO中包含ResponseStatus属性.

这是预期的行为吗?

更新

我应该包括只有在我的响应DTO的名称以Response结尾(区分大小写)时才会出现问题.如果我的请求/响应DTO分别被称为Foo和Bar,我会收到错误的格式正确的JSON响应.

error-handling serialization servicestack servicestack-text

2
推荐指数
1
解决办法
1374
查看次数

JsConfig <MyClass> .ExcludePropertyNames示例,不适合我

尝试从序列化期间排除模型中的属性.

我使用以下语法:

JsConfig<MyTestClass>.ExcludePropertyNames = new[] { "ShortDescription" };
Run Code Online (Sandbox Code Playgroud)

就在那之后,我有以下内容:

            return     (from o in __someProvider.GetAll() select (new
                      {
                          o.Name,
                          o.ShortDescription
                          o.InsertDate
                      }).TranslateTo<MyTestClass>()).ToList()
Run Code Online (Sandbox Code Playgroud)

但是,一旦从方法返回结果,它仍然包含Json中的"ShortDescription"字段.难道我做错了什么?

servicestack servicestack-text

2
推荐指数
1
解决办法
386
查看次数

使用servicestack中的前导@chars反序列化JSON

下面的代码片段复制了我在ServiceStack应用程序中遇到的反序列化问题.在运行以下内容时,收件人属性正确填充但id不是.

    static void Main (string[] args)
    {
        string json = "{\"@id\":\"abcd\",\"consignee\":\"mr mann\"}"; 
        shipment some_shipment = new shipment();
        some_shipment = json.FromJson<shipment>();
        Console.Read();
    }

    class shipment
    {
        public string id { get; set; }
        public string consignee { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

生成JSON的库为一些带有@的元素添加前缀,表示它们来自XML属性,但是这个程序是我无法控制的.我知道ServiceStack名称在JSON和对象属性之间匹配.

我试过将@附加到属性名称,但这没有帮助.

//doesn't help
public string @id { get; set;}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉ServiceStack将@id反序列化为id而不通过实现自定义反序列化器的过程?

c# json servicestack servicestack-text

2
推荐指数
1
解决办法
69
查看次数

将对象转换为不带标头的 CSV 字符串 Servicestack CSVSerializer

我正在使用 Servicestack.text CSV 序列化程序将对象序列化为 CSV 格式。这是我尝试的方法

CsvSerializer.SerializeToString(MyObject)
Run Code Online (Sandbox Code Playgroud)

但它会转换为 CSV,包括这样的标题

ID、姓名、年龄\r\n13、Alex、45

但我不需要这些标题。有什么办法可以排除标题

c# servicestack servicestack-text

2
推荐指数
1
解决办法
1827
查看次数

为什么不需要使用ServiceStack Json Serializer从json字符串反序列化的对象的构造函数

我想知道为什么不需要构造函数将json字符串反序列化为.Net / C#类对象实例。令我惊讶的是,根本没有调用构造函数并将其删除,并且反序列化器仍从json字符串创建了一个对象实例。这正常吗?

(我使用ServiceStack的json序列化器)

c# serialization constructor servicestack servicestack-text

0
推荐指数
1
解决办法
1237
查看次数

ServiceStack:清理字符串值的任何简单方法或选项?

我想知道反序列化时传入的 DTO 中的字符串值是否有任何选项可以“修剪”和“如果为空则设置为空”?我有很多字符串属性需要执行此操作,因此在每个属性的过滤器中手动执行此操作似乎太乏味了...

c# dto servicestack servicestack-text

-2
推荐指数
1
解决办法
346
查看次数