为多级JSON创建一个简单的元数据
creating a breeze metadata for multi-level JSON
我是新的微风,我不太确定如何创建这个JSON数据由服务器返回的javascript元数据。我必须创建自定义元数据,因为服务器不提供我需要的元数据。我们使用oData。有人可以帮助我创建基于这个JSON数据的JavaScript元数据吗?
{
id: "5091bed7-e035-45c6-b2c5-d1301e4170e6",
name: "Mike",
address: {
city: "San Jose",
state: "CA"
},
orders: [
{
id: "1889e425-e8ad-4b79-b797-fe9aa6b0e433",
date: "2015/04/12 00:00:00",
items: [
{
id: "a71aa2eb-9f8d-4234-aa83-6dfc5cd8abcc",
description: "chocolate",
price: "5.00"
},
{
id: "5091bed7-e035-45c6-b2c5-d1301e414444",
description: "cookie",
price: "1.00"
}
]
},
{
id: "5ed077b0-72c4-43d0-fe96-6bebce6e3c86",
date: "2015/05/22 00:00:00",
items: [
{
id: "bc5ed003-1302-4686-8294-4a0186e550a2",
description: "pencil",
price: "0.50"
}
]
}
]
}
在Breeze中,每个对象将被处理为实体(如果它有标识符)或复杂类型(如果它没有)。在您的例子中,我已经为"Customer"(顶层对象)、"Order"answers"OrderItem"创建了实体。我为"Address"做了一个ComplexType。
注意,每个传入对象都应该有一个"$type"属性来告诉Breeze它是什么实体类型或复杂类型。如果没有这个,你需要一个自定义的[JsonResultsAdapter]来告诉Breeze类型。
我的元数据与您的对象不同,因为我假设外键可用于连接Customer、Order和OrderItem,反之亦然。这使得实体更容易使用,但如果服务器不能提供它们,则应该从元数据中省略它们。
{
"structuralTypes": [
{
"shortName": "Address",
"namespace": "MyApp",
"isComplexType": true,
"dataProperties": [
{
"name": "city",
"dataType": "String",
"maxLength": 15
},
{
"name": "state",
"dataType": "String",
"maxLength": 15
}
]
},
{
"shortName": "Customer",
"namespace": "MyApp",
"autoGeneratedKeyType": "KeyGenerator",
"defaultResourceName": "Customers",
"dataProperties": [
{
"name": "id",
"dataType": "Guid",
"isNullable": false,
"isPartOfKey": true
},
{
"name": "name",
"dataType": "String",
"maxLength": 30
},
{
"name": "location",
"complexTypeName": "Address:#MyApp"
}
],
"navigationProperties": [
{
"name": "orders",
"entityTypeName": "Order:#MyApp",
"isScalar": false,
"associationName": "AN_Customer_Order"
}
]
},
{
"shortName": "Order",
"namespace": "MyApp",
"autoGeneratedKeyType": "Identity",
"defaultResourceName": "Orders",
"dataProperties": [
{
"name": "id",
"dataType": "Guid",
"isNullable": false,
"isPartOfKey": true
},
{
"name": "customerID",
"dataType": "Guid"
},
{
"name": "date",
"dataType": "DateTime"
}
],
"navigationProperties": [
{
"name": "customer",
"entityTypeName": "Customer:#MyApp",
"isScalar": true,
"associationName": "AN_Customer_Order",
"foreignKeyNames": [
"customerID"
]
},
{
"name": "items",
"entityTypeName": "OrderItem:#MyApp",
"isScalar": false,
"associationName": "AN_Order_OrderItem"
}
]
},
{
"shortName": "OrderItem",
"namespace": "MyApp",
"autoGeneratedKeyType": "None",
"defaultResourceName": "OrderItems",
"dataProperties": [
{
"name": "id",
"dataType": "Guid",
"isNullable": false,
"isPartOfKey": true
},
{
"name": "orderID",
"dataType": "Guid",
"isNullable": false
},
{
"name": "description",
"dataType": "String",
"isNullable": false
},
{
"name": "price",
"dataType": "Decimal",
"isNullable": false
}
],
"navigationProperties": [
{
"name": "order",
"entityTypeName": "Order:#MyApp",
"isScalar": true,
"associationName": "AN_Order_OrderItem",
"foreignKeyNames": [
"orderID"
]
}
]
}
],
"resourceEntityTypeMap": {
"Customers": "Customer:#MyApp",
"Orders": "Order:#MyApp",
"OrderItems": "OrderItem:#MyApp"
}
}
相关文章:
- Moment/Jquery-一个简单时间线的愚蠢问题
- 问题用moment JS制作一个简单的时间表
- 测试一个简单的javascript按钮
- 用Jquery map和moment js制作一个简单的时间线
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- 调试一个简单的jQuery函数;想知道是否与其他代码冲突
- 一个简单的粘性头jQuery脚本的问题
- Sencha Touch使一个简单的按钮工作
- html表单,它有文本和表,现在我想在一个简单的文本文件中保存和检索数据,如何实现它
- 如何在Javascript中定义一个简单的自动重启倒计时
- 如何使一个简单的HTML文件成为wordpress中可用的页面
- 如何用D3添加一个简单的圆弧
- angularjs做一个简单的倒计时
- 创建一个简单的处理 p5.js 库
- 是否有一个简单的 JQuery 过程来替换页面上每段内部文本的字符串
- 如何在构造函数中创建一个简单的DOM元素,并在调用时将其附加到元素中
- 是否可以将PHP的一个简单片段重新编码为javascript
- 尝试创建一个简单的求和计算器
- 如何使用jquery添加一个简单的转换
- 正在寻找一个简单的JavaScriptHTMLGUI构建器,我可以将其嵌入到我的网站中