Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net BreezeSharp-枚举序列化失败_.net_Breeze_Breeze Sharp - Fatal编程技术网

.net BreezeSharp-枚举序列化失败

.net BreezeSharp-枚举序列化失败,.net,breeze,breeze-sharp,.net,Breeze,Breeze Sharp,这个问题是这个问题的续集 在我的服务器端实体中,我有枚举属性: [Required] public DataStore DataStore { get; set; } 客户端实体中的此属性定义如下: public DataStore DataStore { get { return GetValue<DataStore>(); } set { SetValue(value); } 公共数据存储数据存储 { 获取{retur

这个问题是这个问题的续集

在我的服务器端实体中,我有枚举属性:

[Required]
public DataStore DataStore { get; set; }
客户端实体中的此属性定义如下:

    public DataStore DataStore
    {
        get { return GetValue<DataStore>(); }
        set { SetValue(value); 
    }
公共数据存储数据存储
{
获取{return GetValue();}
set{SetValue(值);
}
当控制器方法向客户端返回数据时,出现序列化错误:“输入字符串的格式不正确。

这里是StackTrace:

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
   at System.Convert.ToInt32(Object value, IFormatProvider provider)
   at Newtonsoft.Json.Linq.JToken.op_Explicit(JToken value)
   at Newtonsoft.Json.Linq.JToken.ToObject(Type objectType)
   at Breeze.Sharp.JsonEntityConverter.<>c__DisplayClassa.<ParseObject>b__6(KeyValuePair`2 kvp) in c:\GitHub\breeze.sharp\Breeze.Sharp\JsonEntityConverter.cs:line 195
   at Breeze.Sharp.Core.EnumerableFns.ForEach[T](IEnumerable`1 items, Action`1 action) in c:\GitHub\breeze.sharp\Breeze.Sharp\Core\EnumerableFns.cs:line 35
   at Breeze.Sharp.JsonEntityConverter.ParseObject(NodeContext nodeContext, EntityAspect targetAspect) in c:\GitHub\breeze.sharp\Breeze.Sharp\JsonEntityConverter.cs:line 180
   at Breeze.Sharp.JsonEntityConverter.PopulateEntity(NodeContext nodeContext, IEntity entity) in c:\GitHub\breeze.sharp\Breeze.Sharp\JsonEntityConverter.cs:line 152
   at Breeze.Sharp.JsonEntityConverter.CreateAndPopulate(NodeContext nodeContext) in c:\GitHub\breeze.sharp\Breeze.Sharp\JsonEntityConverter.cs:line 143
   at Breeze.Sharp.JsonEntityConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer) in c:\GitHub\breeze.sharp\Breeze.Sharp\JsonEntityConverter.cs:line 82
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
位于System.Number.stringtonNumber(字符串str、numberstyle选项、NumberBuffer&Number、NumberFormatInfo信息、布尔解析十进制)
在System.Number.ParseInt32(字符串s、NumberStyles样式、NumberFormatInfo信息)
位于System.String.System.IConvertible.ToInt32(IFormatProvider)
在System.Convert.ToInt32(对象值,IFormatProvider)
在Newtonsoft.Json.Linq.JToken.op_显式(JToken值)
位于Newtonsoft.Json.Linq.JToken.ToObject(类型objectType)
at Breeze.Sharp.JsonEntityConverter.c__在c:\GitHub\Breeze.Sharp\Breeze.Sharp\JsonEntityConverter.cs:第195行中显示ClassA.b__6(KeyValuePair`2 kvp)
c:\GitHub\Breeze.Sharp\Breeze.Sharp\Core\enumerablefs.ForEach[T](IEnumerable`1项,Action`1 Action)中的Breeze.Sharp.Core.enumerablefs.ForEach[T](IEnumerable`1项,Action`1 Action)第35行
在c:\GitHub\Breeze.Sharp\Breeze.Sharp\JsonEntityConverter.ParseObject(NodeContext NodeContext,EntityAspect TargetSpect)中的Breeze.Sharp.JsonEntityConverter.ParseObject(NodeContext,EntityAspect)中:第180行
在c:\GitHub\Breeze.Sharp\Breeze.Sharp\JsonEntityConverter.cs中的Breeze.Sharp.JsonEntityConverter.populatentity(NodeContext NodeContext,IEntity实体)处:第152行
在c:\GitHub\Breeze.Sharp\Breeze.Sharp\JsonEntityConverter.CreateAndPopulate(NodeContext NodeContext)中的Breeze.Sharp.JsonEntityConverter.cs:143行
位于c:\GitHub\Breeze.Sharp\Breeze.Sharp\JsonEntityConverter.ReadJson中的Breeze.Sharp.JsonEntityConverter.ReadJson(JsonReader阅读器,类型objectType,对象存在值,JsonSerializer序列化程序):第82行
位于Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter转换器、JsonReader读取器、类型objectType、对象existingValue)
位于Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList列表、JsonReader阅读器、JsonArrayContract契约、JsonProperty容器属性、字符串id)
当我从模型中排除数据存储属性时,一切都正常。看起来BreezeSharp正在尝试将枚举解析为int

我尝试将客户端属性定义为字符串,但这会导致不一致的CLRPropertyDefinition元数据不匹配。我还尝试像这样定义客户端属性:

    public DataStore DataStore
    {
        get { return GetValue<DataStore>(); }
        set { SetValue(value); 
    }
公共数据存储数据存储 { 得到 { var dataStore=this.GetValue(“dataStore”); 返回DataStore.DEV; } set{this.SetValue(value);} } 但问题发生在get被击中之前

我查看了JsonEntityConverter.cs,现在似乎没有单独处理enum:

private void ParseObject(NodeContext nodeContext, EntityAspect targetAspect) {
      // backingStore will be null if not allowed to overwrite the entity.
      var backingStore = (targetAspect == null) ? null : targetAspect.BackingStore;
      var dict = (IDictionary<String, JToken>) nodeContext.Node;
      var structuralType = nodeContext.StructuralType;
      // needs to be the current namingConvention
      var nc = _mappingContext.EntityManager.MetadataStore.NamingConvention;
      dict.ForEach(kvp => {
        var key = nc.ServerPropertyNameToClient(kvp.Key, structuralType);
        var prop = structuralType.GetProperty(key);
        if (prop != null) {         
          if (prop.IsDataProperty) {
            if (backingStore != null) {
              var dp = (DataProperty)prop;
              if (dp.IsComplexProperty) {
                var newCo = (IComplexObject) kvp.Value.ToObject(dp.ClrType);
                var co = (IComplexObject)backingStore[key];
                var coBacking = co.ComplexAspect.BackingStore;
                newCo.ComplexAspect.BackingStore.ForEach(kvp2 => {
                  coBacking[kvp2.Key] = kvp2.Value;
                });
              } else {
                backingStore[key] = kvp.Value.ToObject(dp.ClrType);
              }
private void ParseObject(NodeContext NodeContext,EntityAspect targetSpect){
//如果不允许覆盖实体,backingStore将为空。
var backingStore=(targetspect==null)?null:targetspect.backingStore;
var dict=(IDictionary)nodeContext.Node;
var structureType=nodeContext.structureType;
//需要是当前的namingConvention
var nc=_mappingContext.EntityManager.MetadataStore.NamingConvention;
dict.ForEach(kvp=>{
var key=nc.ServerPropertyNameToClient(kvp.key,structuralType);
var prop=structureType.GetProperty(键);
如果(prop!=null){
if(属性IsDataProperty){
if(backingStore!=null){
var dp=(DataProperty)prop;
if(dp.IsComplexProperty){
var newCo=(IComplexObject)kvp.Value.ToObject(dp.ClrType);
var co=(IComplexObject)backingStore[key];
var coBacking=co.ComplexAspect.BackingStore;
newCo.ComplexAspect.BackingStore.ForEach(kvp2=>{
coBacking[kvp2.Key]=kvp2.Value;
});
}否则{
backingStore[key]=kvp.Value.ToObject(dp.ClrType);
}

有人知道从哪里开始吗?

这已在Breeze 0.5.5中修复,现在可用。

我确认现在支持枚举,并且不再存在此问题。谢谢!