Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ServiceStack TypeSerializer.DeserializeFromString错误,具有可为空的C类型 - Fatal编程技术网

ServiceStack TypeSerializer.DeserializeFromString错误,具有可为空的C类型

ServiceStack TypeSerializer.DeserializeFromString错误,具有可为空的C类型,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,ServiceStack方法TypeSerializer.DeserializeFromString中似乎有一个关于可空类型的错误 这是一个已知的问题吗? 是否有修复或解决方法 考虑以下代码,其中包含一个JsConfig作用域,该作用域强制在任何反序列化错误上引发异常: public class MeasurementsData { public int? FlowLeft { get; set; } public int? FlowRight { get; set; }

ServiceStack方法TypeSerializer.DeserializeFromString中似乎有一个关于可空类型的错误

这是一个已知的问题吗? 是否有修复或解决方法

考虑以下代码,其中包含一个JsConfig作用域,该作用域强制在任何反序列化错误上引发异常:

public class MeasurementsData
{
    public int? FlowLeft { get; set; }
    public int? FlowRight { get; set; }
    public Single? RatioLeft { get; set; }
    public Single? RatioRight { get; set; }
}
 .
 .
 .

var originalData = "{FlowRight:970045,RatioRight:null}";
object afterConversionData = null;

try
{
    using (var scope = JsConfig.BeginScope())
    {
        scope.ThrowOnDeserializationError = true;
        afterConversionData =TypeSerializer.DeserializeFromString(originalData.ToString() ,typeof(MeasurementsData));
    }

}
catch (System.Runtime.Serialization.SerializationException ex)
{

    Logger.Warn("Service exception", ex);
}
varaible originalData中的json导致异常(如下所述)“无法将属性'RatioRight'设置为'null'”。 尽管'RatioRight'是'nullable single','null'是有效值,但仍会发生这种情况

删除
scope.ThrowOnDeserializationError=true
“可行”,但这不是我们的选择,因为我们需要验证服务器端接收的数据。 我将解释,如果我们将
ThrowOnDeserializationError
设置为false(这是默认值),则在这种特定情况下不会抛出错误,但它将允许发送类似这样的json:
{FlowRight:970045,RatioRight:fdfdfd}
DeserializeFromString的结果不会引发异常,尽管“fdfd”不是可为null的单个值。将发生的情况是,异常将在内部处理,而设置为null,这将导致服务器不知道发送的数据无效,并且稍后将导致保存null值,而不是数据库中已有的值(如我所述,我们不接受)

例外情况:

来源:ServiceStack.Text

异常:无法使用{FlowRight:970045,RatioRight:null}设置属性“MeasurementData” InnerException:无法将属性“RatioRight”设置为“null”

堆栈跟踪: 在ServiceStack.Text.Common.DeserializeTypeRefJsv.StringToType(TypeConfig TypeConfig、String strType、EmptyCtorDelegate Torfn、Dictionary的2 typeAccessorMap) 在ServiceStack.Text.Common.DeserializeType'1.c__DisplayClass3.b__2(字符串值) 位于ServiceStack.Text.TypeSerializer.DeserializeFromString(字符串值,类型类型) 位于D:\Service\API Services\Domain\Services\DataDomainService.cs中的Site.Service.Services.DataDomainService.Any(SaveDataDomainRequest请求):第93行


ServiceStack.Text的TypeSerializer使用CSV转义,因此
null
值被视为
“null”
字符串,无法转换为数字,从而导致错误

要保留默认值,应该从JSV发出,例如:

var originalData = "{FlowRight:970045}";
如果您正在寻找JSON序列化程序,则应使用
JsonSerializer
,例如:

var afterConversionData = JsonSerializer.DeserializeFromString(
    originalData.ToString(), typeof(MeasurementsData));
可以使用扩展方法更简洁地重写,例如:

var object = originalData.ToString().FromJson<MeasurementsData>();
var object=originalData.ToString().FromJson();

ServiceStack.Text的TypeSerializer使用CSV转义,因此
null
值被视为无法转换为数字的
“null”
字符串,从而导致错误

要保留默认值,应该从JSV发出,例如:

var originalData = "{FlowRight:970045}";
如果您正在寻找JSON序列化程序,则应使用
JsonSerializer
,例如:

var afterConversionData = JsonSerializer.DeserializeFromString(
    originalData.ToString(), typeof(MeasurementsData));
可以使用扩展方法更简洁地重写,例如:

var object = originalData.ToString().FromJson<MeasurementsData>();
var object=originalData.ToString().FromJson();