简体   繁体   English

为多级JSON创建轻松的元数据

[英]creating a breeze metadata for multi-level JSON

I am new to breeze and am not quite sure how to create javascript metadata for this JSON data returned by server. 我不熟悉,也不十分确定如何为服务器返回的JSON数据创建javascript元数据。 I have to create create a custom metadata since the server does not provide the metadata I need. 由于服务器未提供我需要的元数据,因此我必须创建一个自定义元数据。 We use oData. 我们使用oData。 Could someone please help me with creating a JavaScript metadata based on this JSON data? 有人可以帮我基于此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" } ] } ] } 

In Breeze, each of the objects would be handled as either an Entity (if it has an identifier) or a Complex Type (if it does not). 在Breeze中,每个对象都将作为实体 (如果有标识符)或复杂类型 (如果没有标识符)进行处理。 In your case, I've made Entites for "Customer" (the top level object), "Order", and "OrderItem". 在您的情况下,我为“客户”(顶级对象),“订单”和“ OrderItem”创建了实体。 I've made a ComplexType for "Address". 我已经为“地址”创建了ComplexType。

Note that each incoming object should have a "$type" property to tell Breeze what Entity Type or Complex Type it is. 请注意,每个传入对象应具有“ $ type”属性,以告知Breeze它是什么实体类型或复杂类型。 Without that, you'll need a custom [JsonResultsAdapter] to tell Breeze the type. 否则,您将需要自定义[JsonResultsAdapter]来告知Breeze类型。

My metadata differs from your objects in that I've assumed that foreign keys are available to connect Customer to Order to OrderItem and vice-versa. 我的元数据与您的对象不同,因为我假设外键可用于将Customer连接到Order到OrderItem,反之亦然。 That makes the entities easier to work with, but you should omit them from the metadata if your server cannot provide them. 这使实体更易于使用,但是如果服务器无法提供,则应从元数据中省略它们。

{
  "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"
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM