小编bst*_*ack的帖子

JSON中的ASP.NET Web API日期格式未成功序列化

所有,

我们正在使用ASP.NET Web API,我们有一个基于REST的服务,其中包含有效负载的JSON.如果我将以下日期作为字符串传递,例如

sampleObj: {
...
myDate: "31/12/2011 00:00:00",
...
}
Run Code Online (Sandbox Code Playgroud)

作为JSON有效内容中的属性值,date属性被反序列化为DateTime.MinValue.字符串格式有效吗?

我们知道格式"2012-10-17 07:45:00"成功序列化,但我们不能保证收到的所有日期都是这种格式.什么是有效的选择?

c# serialization json.net asp.net-web-api

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

F# - 我可以从函数返回一个有区别的联合

我有以下类型:

type GoodResource = {
    Id:int;
    Field1:string }


type ErrorResource = {
    StatusCode:int;
    Description:string }
Run Code Online (Sandbox Code Playgroud)

我有以下歧视联盟:

type ProcessingResult = 
    | Good of GoodResource
    | Error of ErrorResource
Run Code Online (Sandbox Code Playgroud)

然后想要一个具有被区分联合ProcessingResult的返回类型的函数:

let SampleProcessingFunction value =
    match value with
    | "GoodScenario" -> { Id = 123; Field1 = "field1data" }
    | _ -> { StatusCode = 456; Description = "desc" }
Run Code Online (Sandbox Code Playgroud)

是我想做的事情.编译器发出声明它希望GoodResource是返回类型.我错过了什么,或者我是否完全以错误的方式解决这个问题?

f# functional-programming discriminated-union

11
推荐指数
3
解决办法
963
查看次数

如何在F#中实现"早期返回"逻辑

我很熟悉在F#中没有等效的"return"关键字.

然而,我们最近遇到了一个问题,我们需要一个包含许多步骤的工作流程,其中每个步骤都可以返回好的或坏的结果.如果在任何步骤中发现不良结果,我们想退出工作流程 - 并提前退出!

我们通过有效地检查每个步骤中的错误(即函数)来解决它,但我不认为这是正确的方法 - 它是低效的,我们不提前退出.

工作流程中的示例函数如下:

let StepB stepAResult someParameters =
    match stepAResult with
    | Good(validResourceData) ->
        // Do current step processing
        // Return current step result
    | Error(error) -> error |> Result.Error
Run Code Online (Sandbox Code Playgroud)

工作流本身如下:

let Workflow someParameters =
    let stepAResult = StepA someParameters
    let stepBResult = StepB stepAResult someParameters
    let stepCResult = StepC stepBResult someParameters
    let stepDResult = StepD stepCResult someParameters
    stepDResult
Run Code Online (Sandbox Code Playgroud)

因此,每个样本函数都会接收上一个函数的结果,并且只有在没有错误时才执行当前步骤!

我遇到的问题是,如果StepA因错误而失败,则仍会调用其他所有步骤.

是否存在"早期返回"的"功能"方式,而不是调用工作流中的每个功能,我们必须每次检查错误?

f# functional-programming purely-functional

10
推荐指数
2
解决办法
2352
查看次数

NSubstitute拦截"setter"只有属性调用

使用NSubstitute,有没有办法捕获传递给属性设置器的值?

例如,如果我有以下界面:

public interface IStudent {
    int Id { set; }
    string Name { set; }
}
Run Code Online (Sandbox Code Playgroud)

说我有一个替代品,例如:

var _studentSub = Substitute.For<IStudent>();
Run Code Online (Sandbox Code Playgroud)

如果调用替代的任何"set"方法,我有什么方法可以拦截和捕获值?

mocking nsubstitute

8
推荐指数
1
解决办法
3736
查看次数

NHibernate 3.0将小数舍入到小数点后5位 - 为什么?

所有,

我们使用NHiberate 2.1,我们存储十进制值(汇率),例如123.1234567到7位小数

我们使用默认映射样式映射类型:

<property name="ExchangeRate"  not-null="true" />
Run Code Online (Sandbox Code Playgroud)

但是当我们升级到NHibernate 3.0时,上面的值保存为123.1234500.

它没有在3.0发行说明中指定此行为更改,尽管它似乎详细说明问题[NH-1594],十进制的默认值是DECIMAL(19,5)

我们有一个解决方案,即指定以下映射:

<property name="ExchangeRate"  type="decimal(10,7) not-null="true" />
Run Code Online (Sandbox Code Playgroud)

我需要知道这个解决方案是解决这个问题的正确方法吗?此外,为什么在2.1和3.0之间的舍入行为会发生功能性变化?

干杯,

比利栈

precision nhibernate decimal

7
推荐指数
1
解决办法
5473
查看次数

SqlDataConnection类型提供程序 - 使用脚本参数设置数据库连接字符串

使用SqlDataConnection类型提供程序的常规方法如下:

type dbSchema = SqlDataConnection<"Data Source=MYSERVER\INSTANCE;InitialCatalog=MyDatabase;Integrated Security=SSPI;">
let db = dbSchema.GetDataContext()
Run Code Online (Sandbox Code Playgroud)

但是我们遇到一个问题,我们希望在f#脚本中使用此类型提供程序,其中数据库的连接字符串作为参数传递.所以我想做的是这样的:

let connectionString= Array.get args 1
type dbSchema = SqlDataConnection<connectionString>
Run Code Online (Sandbox Code Playgroud)

但是它会给出错误"这不是常量表达式或有效的自定义属性值"

有没有办法做到这一点?

f# type-providers

7
推荐指数
1
解决办法
742
查看次数

在f#中自动计算出函数名称

如果我有一个函数是模块的一部分,并且我想在函数内部进行日志条目,我必须手动打印函数名称空间和名称,例如

namespace MyModuleNamespace
 module MyModule = 
 let AddTwoNums logger x y =
    logger.Info("MyModuleNamespace.AddTwoNums - Start")
    let res = x+y
    logger.Info("MyModuleNamespace.AddTwoNums - End")
    res
Run Code Online (Sandbox Code Playgroud)

有什么方法可以自动解决"MyModuleNamespace.AddTwoNums"的问题,因为它非常麻烦/容易出错,尤其是在重构代码时必须重命名函数和模块时

即使无法做到,有什么方法可以自动解决"AddTwoNums"是什么,即功能名称?

logging f# functional-programming

7
推荐指数
2
解决办法
250
查看次数

基于函数签名的模式匹配

在F#中,您可以在函数签名上进行模式匹配.我想用一个函数来装饰一些函数,该函数测量函数的执行并调用statsd.我目前的功能是:

let WrapFunctionWithPrefix(metrics:Metric.Client.IRecorder, functionToWrap, prefix) =
    let metricsIdentifier = (sprintf "%s.%s" prefix Environment.MachineName)
    using (metrics.StartTimer(metricsIdentifier)) ( fun metrics -> functionToWrap)
Run Code Online (Sandbox Code Playgroud)

如您所见,前缀会有所不同,在我们的应用程序中,这将根据函数定义而有所不同.因此,每次我想要执行以下操作时,不必传递度量前缀:

let WrapFunction metrics afunc = 
    match afunc with
    | :? (int -> int) -> WrapFunctionWithPrefix(metrics, afunc, "My function 1")
    | :? (string -> string) -> WrapFunctionWithPrefix(metrics, afunc, "My function 2")
    | _ -> failwith "Unknown function def"
Run Code Online (Sandbox Code Playgroud)

基于F#中的函数签名是否有任何模式匹配方式?

任何帮助赞赏.

比利

f# functional-programming statsd

6
推荐指数
1
解决办法
237
查看次数

F#代码调用包含Func参数的ac#方法的行为异常

最近,我们遇到了一个F#代码调用C#代码的问题。我已经尽可能简化了这个问题。C#代码如下:

using System;

namespace CSharpLib
{
    public abstract class InputMessageParent
    {
        public readonly Guid Id;

        protected InputMessageParent(Guid id) { this.Id = id; }
    }

    public class Result { public string ResultString; }

    public enum FunctionResult
    {
        None,
        Good,
        Bad
    }

    public class ConfigurationBuilder
    {
        public Result DoWork<TMessage>(
            string param1,
            Func<TMessage, FunctionResult> action)
            where TMessage : InputMessageParent
        {
            return new Result() { ResultString = "Good" };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

F#代码需要调用ConfigurationBuilders DoWork函数。请注意,DoWork函数采用两个参数,一个简单的字符串和一个Func作为第二个参数。Func接受必须从InputMessageParent继承的TMessage,并返回简单的Result类型。F#代码如下:

open System

type InputMessageConcreteTypeA =
    inherit CSharpLib.InputMessageParent
    val Property1:string
    new …
Run Code Online (Sandbox Code Playgroud)

c# f# c#-to-f#

6
推荐指数
1
解决办法
105
查看次数

Type.GetType()在C#代码中不适用于F#类型

我有一个名为Assembly1的F#程序集

我有以下模块:

namespace Assembly1

module MyModule =
   type MyClass(x: int, y: int) =
   new() = MyClass(0, 0)
Run Code Online (Sandbox Code Playgroud)

在引用此F#程序集的C#程序集中,以下代码为我提供了一个'null'值:

var myType = Type.GetType("Assembly1.MyModule.MyClass, Assembly1");
Run Code Online (Sandbox Code Playgroud)

我想做的不可能吗?

reflection f# c#-to-f#

5
推荐指数
2
解决办法
242
查看次数