问题标签 [servicestack-text]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
92 浏览

c# - SerializationException 在一台机器上而不是在另一台机器上

我正在为一个项目使用 Visual Studio 2013 和 TFS。我和我的同事分别有 Windows 8.1 和 Windows 8 的机器,它们都指向同一个数据库。两台机器都安装了最新的 .NET 框架。

到目前为止一切都很好,直到我添加了 nuget 包 MailChimp.NET,它还依赖于 ServiceStack.Text。对于任何 mailchimp API 调用,它仅在我的机器上引发以下错误

类型定义应以“{”开头,期望序列化类型“ApiError”,字符串以:<HTML>

<HEAD>

<meta http-equiv="Content-Type" co

我在同事的机器上也试过了,一切正常。即使我将整个解决方案复制粘贴到本地机器并运行,也会出现相同的序列化异常。

这是只有我的机器抛出错误的地方

在 ServiceStack.Text.Common.DeserializeTypeRefJson.StringToType(类型类型,字符串 strType,EmptyCtorDelegate ctorFn,Dictionary`2 typeAccessorMap)

由于发生此错误,我遗漏了什么?

0 投票
1 回答
752 浏览

c# - ServiceStack ormlite json 不会从数据库反序列化

ServiceStack ORMLite 不会从 Postgresql 反序列化我的类。

将对象保存在缓存上解决了,但它不能将它们加载回来(保存是可以的)。

下面是重现问题的代码。

Postgresql 上的 JSON 与上面的代码相同。

0 投票
1 回答
153 浏览

servicestack - 如何使用包含值的逗号(,)处理 JSV?

假设我们有一个字符串如下:

这就是我反序列化我的字符串的方式。

结果,我将每个员工的地址都设置为第一个命令,即,

这是由于以逗号(,)作为分隔值的 JSV 格式。

如何在 ServiceStack 中使用 JSV 处理这种场景?提前致谢。

0 投票
1 回答
104 浏览

.net - 是否有一个可以同时处理对象数组和抽象类数组的 Json 库?

我需要从/向用 XmlSerialization 属性装饰的 POCO 读/写 Json。此 POCO 是从 XSD 生成的。它广泛使用多态性、继承、对象、对象数组和抽象类数组。我已经尝试过看起来非常有前途的JsonFx V2,但不幸的是,它运行得并不好,而且这个开源项目几年来几乎没有任何活动。

任何帮助表示赞赏。

更新 1:AFAIK Json.NET 不知道如何处理 XmlSerialization 属性。

更新 2:ServiceStack V3 似乎可以完成这项工作,但我至少有一个问题。

当属性是 object 类型时,会添加一个 _type 成员,这很好。但是对象数组没有这样的信息。

考虑以下 c# 类:

如果对象数组 (object[]) 包含 adxppostalCode 的实例,则在序列化时没有类型信息放入 Json 中。因此,它在反序列化时将 ADXP 类的实例添加到数组中,而不是 adxppostalCode 的实例。

我希望这只是一个配置问题,因为除了这种行为之外,它运行良好。

Udapte 3:经过更多测试,Json.NET(至少版本 7.0.1 Beta 3)似乎支持属性并为对象数组发出正确的类型信息(名称空间和库名称已被删除)。

对于抽象类数组,正确的类型被写入输出。在反序列化时,它尝试创建一个抽象的基本类型的实例,但它失败了。例如 :

json片段:

无法创建 QTY 类型的实例。类型是接口或抽象类,不能实例化。

类层次结构:

抽象类数组:

0 投票
1 回答
1129 浏览

c# - 防止使用 ServiceStack Json 序列化默认值类型

我的一些合约有很多 int/decimal/short/byte 等属性,这些属性通常具有默认值。

如果它们是默认值,我不想序列化这些属性,因为这最终会占用相当多的带宽,而在我的情况下,这些额外的字节确实会产生影响。这也使得阅读日志需要更多的努力,因为将这些默认值序列化会产生很多不必要的噪音。

我知道您可以使用JsConfig.SerializeFnRawSerializeFn在这种情况下返回 null ,但这也会影响 List ,这是不可取的。

有没有其他方法可以防止这些值被序列化?

我能想到的另一种选择是将它们改为可空类型(例如 int?)并将它们的值设置为 null 而不是 0 以防止序列化,但这将涉及更改大量合同......

另一种选择是放弃 ServiceStack 进行 json 序列化并使用开箱即用的Json.NET:http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm

0 投票
0 回答
45 浏览

c# - 使用 ServiceStack.Text 对通用列表进行不正确的反序列化

我想问一下我得到的以下行为 - 使用 v3 (BSD) 或 v4 - 是否是一个错误。

我有一个通用列表。我使用 myList.ToJson() 对其进行序列化。结果我得到了这个:

也就是说,只有第一个元素的类型被写入。结果,当我这样做时:

我得到一个列表,它的第一个元素是 MyType 和作为后续元素的字符串。我知道:

有效,但我不知道编译时的类型。我有两个问题:

  1. 这是一个错误吗?
  2. 如果没有,有没有办法在没有动态解析开销的情况下解决它(即 JsConfig.IncludeTypeInfo)?

上述原因是:

在:

在:

该行于 2012 年 9 月 12 日在 067ce1f62fc6addd3685a2134dd576529db2549f 添加,以删除属性本身的类型。我认为 IsWritingDynamic 之前的值应该在所有属性写入之后恢复,也就是在同一个方法结束之前。谁能证实这一点?

0 投票
1 回答
590 浏览

csv - ServiceStack CSV 序列化程序在序列化日期周围加上额外的引号

我在我的站点中使用 ServiceStack 来允许用户下载系统数据集之一的 csv。在我的 AppHost 的配置方法中,我为 DateTime 提供了一个自定义序列化程序。看起来像这样

使用 csv 格式时,结果中的所有日期都包含在额外的引号中;例如结果是 """06/24/2015 16:22:16""" 当我期望它是 "06/24/2015 16:22:16"

在我看来,这一定是 ServiceStack 序列化中的一个错误。有没有办法防止这种情况发生?下面是一个完整的示例,展示了向 /csv/oneway/Request 发出请求时出现的问题

和 Global.asax.cs

0 投票
1 回答
280 浏览

servicestack - JsConfig.BeginScope 和自定义类型序列化器

JsConfig.BeginScope 允许我为特定操作自定义序列化而不影响全局配置。但是,如何在范围内为特定类型提供自定义 SerializeFn?似乎 JsConfig< T > 总是静态的并且完全忽略了范围?

0 投票
1 回答
238 浏览

json - ServiceStack.Text 是否有任何 Json Serializer/DeSerializer 大小限制?

Service-stack.Text 是否有任何 Json Serialize/DeSerialize 大小限制?

我想知道 Json 序列化和反序列化是否有大小限制。基于此,我想不发送任何对象集合作为输入。

谢谢

0 投票
1 回答
83 浏览

c# - Json 名称非法的 ServiceStack.Text 和 DeserializeFromString

我已经使用 ServiceStack.Text DeserializeFromString 很长时间了,但是在一个新项目中我遇到了一个问题。

我需要解析为对象的 JSON 格式如下:

所以对象名称以 URL 为前缀,所以我无法将其与类成员名称匹配。我尝试使用 DataContract 来映射名称,但它只返回空对象。

是否有另一种使用 ServiceStack.Text 的方法,还是我需要手动解析 JSON?

任何帮助,将不胜感激。

编辑:

经过一番尝试,我设法使用 DataContract 属性解决了这个问题。之前它失败了,因为我指定的类的前缀不正确。我设法像这样解决它: