标签: servicestack

将ServiceStack Client与非ServiceStack REST服务一起使用

我在使用ServiceStack的DataContract API +*ServiceClient从标准XML/JSON REST服务中获取适当的反序列化时遇到了一些麻烦.例如,如果我们采用以下输出(使用accept header来获取json):

http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/198440/allinfo

  1. 你将如何构建一个模型对象来处理JSON输出和从该服务获取XML输出(使用accept头来获取json)?

  2. 您是否需要在DataContract和DataMember属性中提供显式的"Name"参数才能获得适当的反序列化?

  3. ServiceStack如何将XML/JSON对象名称与模型中的属性名称进行比较?他们是否区分大小写?

  4. 我们可以在JsonRestClientAsync中获得某种通用的Func委托API,以无缝地集成我们自己的反序列化机制,我们有第三方格式来处理吗?

是的我知道我可以使用ServiceStack.Text进行显式反序列化.我在所有的.NET项目中都非常依赖这种依赖:-)

谢谢,

Anuj

rest json servicestack

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

为什么servicestack不能将这个JSON反序列化为C#?

我试图将以下JSON表示反序列化为强类型对象.我可以从c# - > json序列化它,但反之亦然.

C#

public class Package 
{
   public Guid Id {get;set;}
   public List<string> Email {get;set;}
   public List<Items> Items {get;set;}
}

public class Items
{
   public string Uri {get;set;}
   public int Width {get;set;}
   public int Height {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

JSON

{
    "Id":"84fd8751-6107-41af-9473-65aae51e042a",
    "Email":[
    "j@t.com"
    ],
    "Items":"[
       {"Uri":"http://localhost/foo.jpg","Width":234,"Height":313},
       {"Uri":"http://localhost/bar.jpg","Width":234,"Height":174}]"
}
Run Code Online (Sandbox Code Playgroud)

用于反序列化的代码

var instance = JsonSerializer.DeserializeFromString<Package>(jsonData);
Run Code Online (Sandbox Code Playgroud)

instance创建了对象,并且有2个项目对象,instance.Items但它们的所有属性都为null.

TIA

c# json deserialization servicestack

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

Servicestack - 操作顺序流畅的验证和请求过滤器

我们有一些请求过滤器,也使用验证功能.

[AttributeUsage(AttributeTargets.Method, Inherited = true)]
public class MyFilterAttribute : Attribute, IHasRequestFilter
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

在AppHost中:

    public override void Configure(Container container)
    {
        ....
        Plugins.Add(new ValidationFeature());
        ....
    }
Run Code Online (Sandbox Code Playgroud)

我需要在请求过滤器之后运行流畅的验证,因为一些过滤器会将数据添加到dto然后进行验证.我已经看到了操作顺序但是没有说明验证的位置......至少我没有看到.

任何帮助,将不胜感激.

c# fluentvalidation servicestack

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

在JsonServiceClient.Get中的IReturn和IReturnVoid的目的

我有必要向ServiceStack的JsonServiceClient.Get提供IReturn或IReturnVoid引用吗?必须有一个很好的理由(我对框架很新)但我不明白为什么我必须将我的对象转换为IReturn包装器或使它们依赖于ServiceStack.

我已阅读这些帖子,但找不到我正在寻找的解释(仅解决方法):

谢谢!

servicestack

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

Typelite:DTO中的日期映射到Date,但实际上是ISO8601字符串

我使用ServiceStack.在我的C#DTO中,我有一个属性

    public DateTime Created  { get; set; }
Run Code Online (Sandbox Code Playgroud)

使用TypeLITE http://type.litesolutions.net/映射到TypeScript

interface Instance {
   Created: Date;
Run Code Online (Sandbox Code Playgroud)

但是,由于我不想通过API发送JavaScript特定的日期格式,因此我使用此ServiceStack设置使用ISO日期

JsConfig.DateHandler = JsonDateHandler.ISO8601;
Run Code Online (Sandbox Code Playgroud)

所以,我在这里不匹配.一种解决方案是使用Typescript类

interface Instance {
   Created: string;
Run Code Online (Sandbox Code Playgroud)

并在使用时解析日期.我在哪里调用Date.parse('iso-date-string')?雄心勃勃的解决方案是两次使用TypeScript类,一个使用字符串,另一个使用Date.

为了使TypeLITE生成字符串而不是DateTime日期,我该怎么办?

类的数量相当小,所以我可以手动修复它们.但是,我的想法是,我将有一个特殊的API调用,客户端可以下载TypeScript声明,然后,一个完整的自动TypeLITE会更好.

servicestack typelite

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

如何在node.js上托管servicestack?

我们有一个访问servicestack REST服务的Icneium Hybrid Mobile应用程序.可以在Node.js而不是IIS上托管servicestack吗?任何例子都非常感谢.

node.js servicestack

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

如何使用SYNCHRONOUS页面POST从HTML表单发送复杂的JSON对象?

我的服务器正在使用ServiceStack,并希望收到一些这样的数据:

{
    Customer: {
        Company: "TheCompany",
        RegionCode: "AU_NSW"
    },
    Name: {
        First: "Jimi",
        Last: "Hendrix"
    }

}
Run Code Online (Sandbox Code Playgroud)

我有一个包含这些字段的表单,我可以使用JQuery轻松获取数据,创建嵌套的JSON对象并使用$ .post发送它.

但我不想将其作为AJAX发送,因为我希望整个页面都提交,然后浏览器将服务器的响应显示为新页面.只是经典的表单帖子行为.

我已经尝试将复杂的json作为字符串嵌入隐藏的表单字段中 - 没有雪茄.

我还查看了ServiceStack是否有任何命名约定,以便我可以调用我的表单字段"Name [First]"并让ServiceStack将正确的值放在正确的嵌套结构中 - 也就是没有雪茄.

  1. 有没有办法在表单发送数据之前将JSON对象附加到表单的POST数据?要么
  2. 有没有办法我可以使用jQuery进行整页提交(所以我可以发送一个复杂的嵌套JSON,同时仍然有正常的"页面提交"行为)?

javascript jquery json servicestack

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

服务堆栈POST请求正文格式/转换

我使用带有Route anotation的RequestClass来调用Json-Client POST方法.现在,虽然参数的结构是这样的

public class GetTicketRequest: IReturn<JsonObject>
{
    public string CartId {
        get;
        set;
    }
    public string PriceId {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

BackendAPI需要它们在json请求中的"data"中,所以更像是

{
   "data":[
   {"cartid":123,
   "priceId":11}]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在调用之前转换为body的请求对象

JsonServiceClient _restClient = new JsonServiceClient(baseUrl);
JsonObject oneResponse = _restClient.Post(options);
Run Code Online (Sandbox Code Playgroud)

rest post json servicestack

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

使用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
查看次数

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