Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Json Breezejs与Tout元数据的命名约定_Json_Breeze - Fatal编程技术网

Json Breezejs与Tout元数据的命名约定

Json Breezejs与Tout元数据的命名约定,json,breeze,Json,Breeze,我一直在阅读答案和Breeze文档,挖掘代码,但我就是做不到这一点 我和NancyFx有一个Web服务,许多Web应用程序都使用它,我决定采用json中的camelCase约定 '[{"id":"0", "slug":"my-slug","name":"Slug"}]' 现在我正在研究breeze,我想使用oData查询,我正在使用Linq2Rest,所以我的第一个尝试模块是这样的 private dynamic GetFoos(dynamic p) { //Converting th

我一直在阅读答案和Breeze文档,挖掘代码,但我就是做不到这一点

我和NancyFx有一个Web服务,许多Web应用程序都使用它,我决定采用json中的camelCase约定

'[{"id":"0", "slug":"my-slug","name":"Slug"}]'
现在我正在研究breeze,我想使用oData查询,我正在使用Linq2Rest,所以我的第一个尝试模块是这样的

private dynamic GetFoos(dynamic p)
{
    //Converting the request params to NameValueCollection to be used by
    //extensionmethod Filter of Linq2Rest
    var nvc = this.BuildNameValueCollection();
    var institutions = Repository.Get();
    return Response.AsJson(institutions.Filter(nvc));
}
当我做这样的事情时,这就像一个符咒

 http://foo.com/foos$filter=Slug%20eq%20my-slug
好的,现在让我们玩Breeze…所以我手上有我的元数据,我有这样的东西

function addFooModel() {
    addType({
        name: 'Foo',
        dataProperties: {
            id : { type : ID },
            name : { nullOk: false },
            slug : { nullOk: false },
        }
    });
};
 var query = breeze.EntityQuery.from('foos')
                                  .using(manager)
                                  .where('slug', '==', slug)
                                  .toType('Foo');
我这样质疑我的服务

function addFooModel() {
    addType({
        name: 'Foo',
        dataProperties: {
            id : { type : ID },
            name : { nullOk: false },
            slug : { nullOk: false },
        }
    });
};
 var query = breeze.EntityQuery.from('foos')
                                  .using(manager)
                                  .where('slug', '==', slug)
                                  .toType('Foo');
这就是一切都崩溃的地方,首先因为我在.NET中的类Foo的属性声明如下

public class Foo
{
    public int Id {get; set;}
    public string Name {get; set;}
    public string Slug {get; set;}
}
因此,Breeze构建的url是
http://foo.com/foos$filter=slug%20eq%20my slug
由于我的属性在PascalCase Linq2Rest中,noupe说没有slug属性

如果我声明
breeze.NamingConvention.camelCase.setAsDefault()
url是正确的,但数据没有绑定,因为它需要PascalCase中的json,但返回的json是camelcase

我试图创建namingConvention,在dataProperty上设置nameOnServer,创建一个jsonResultAdapter,但我无法让它工作

我知道我能做到

 var query = breeze.EntityQuery.from('foos')
                                  .using(manager)
                                  .where('Slug', '==', slug);
这是可行的,但是
数据。结果
不绑定到Foo模型

那么,有没有一种方法可以从微风中做到这一点,比如:

在PascalCase中创建url,然后在CamelCase中解析json

我用jsonResultAdapter做了这个变通方法,但我不喜欢它

var jsonResultsAdapter = new breeze.JsonResultsAdapter({
    name: "fooAdapter",
    extractResults: function(json) {
        return json.results;
    },
    visitNode: function(node, mappingContext, nodeContext) {
        for (var key in node){
            node[key.substr(0, 1).toUpperCase() + key.substr(1)] = node[key];
        }
        return {
            entityType: mappingContext.query.resultType
        };
    }
});
建议

谢谢

编辑

现在我正在使用breeze
breeze.NamingConvention.camelCase.setAsDefault()附带的camelCase配置我的模型的属性在camelCase中,我使用的jsonResultsAdapter就是这个

 var jsonResultsAdapter = new breeze.JsonResultsAdapter({
    name: "fooAdapter",
    extractResults: function(json) {
        return json.results;
    },
    visitNode: function(node, mappingContext, nodeContext) {
        for (var key in node){
            node[key.substr(0, 1).toUpperCase() + key.substr(1)] = node[key];
        }
        return {
            entityType: mappingContext.query.resultType
        };
    }
});
我正在向节点添加相同的属性,但使用PascalCase。如果服务器在适配器之后提供这个json
'[{id:“0”,“slug:“my slug”,“name:“slug”}]
节点在
'[{id:“0”,“slug:“my slug”,“name:“slug”,“id:“0”,“slug:“my slug”,“name:“slug”}]
中转换,然后我还不知道在哪里,由于我使用的namingConvention,Breeze将PascalCase中的属性映射到camelCase

问题是这个

  var query = breeze.EntityQuery.from('foos')
                                  .using(manager)
                                  .where('slug', '==', slug)
                                  .toType('Foo');

你能发布你的自定义NamingConvention实现吗?我使用camelCase默认NamingConvention,我只是使用jsonresultsAdapter向json添加属性,然后breeze进行映射……breeze NamingConvention只应用于属性名,而不是资源名。因此,您的查询应该是“from('Foos')”而不是“from('Foos')。我想我无法解释自己。我知道namingConvention只用于属性名称,而不是资源名称。
from('Foos'))
是正确的,它正在工作,因为这就是我在服务器上命名路由的方式。我遇到的问题是breeze的自动映射。我想用PascalCase发送查询,我想用camelCase中的Json构建我的对象。这是我不能做的。谢谢。。。