OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

odata message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: [OASIS Issue Tracker] (ODATA-1034) Support the notion of a collection of name/value pairs where the type of the value is known


Hubert Heijkers created ODATA-1034:
--------------------------------------

             Summary: Support the notion of a collection of name/value pairs where the type of the value is known
                 Key: ODATA-1034
                 URL: https://issues.oasis-open.org/browse/ODATA-1034
             Project: OASIS Open Data Protocol (OData) TC
          Issue Type: Improvement
          Components: OData CSDL, OData CSDL JSON , OData JSON Format, OData Protocol, OData URL Conventions
    Affects Versions: V4.01_CSD02
            Reporter: Hubert Heijkers


There is currently no easy way (read: without specifying an additional wrapper entity type) of specifying a, what most people would likely refer to as a, dictionary, or a collection of name/value pair, in which I can specify the type of the values!

So where we would need to do something today like:

      <EntityType Name="ValueType">
        <Key>
          <PropertyRef Name="Key"/>
        </Key>
        <Property Name="Key" Type="Edm.String" Nullable="false"/>
        <Property Name="PropA" ... />
        ...
      </EntityType>

      <EntityType Name="ValueTypeDictionaryWrapper">
        <Key>
          <PropertyRef Name="Name"/>
        </Key>
        <Property Name="Name" Type="Edm.String" Nullable="false"/>
        <NavigationProperty Name="Value" Type="ns.ValueType" Nullable="false"/>
      </EntityType>

      <AnyStructuredType Name="ValueTypeDictionaryContainer">
        ...
        <NavigationProperty Name="Values" Type="Collection(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
        ...
      </AnyStructuredType>

Note that the wrapper has to be an entity type to be able to use the name (key) to index into the 'dictionary'. This is even a bit weirder if what we are putting in the dictionary is actually complex types that one would want to treat just like a collection of that complex type.

The payload would look something like this:

{
	"@odata.context": "$metadata#AnyStructuredType(Values(Value))/$entity",
	...,
	"Values": [{
		"Name": "foo",
		"Value": {
			"Key": "38hfgs8",
			"PropA": "APropA_value",
			...
		},
		"Name": "bar",
		"Value": {
			"Key": "f93d8r3",
			"PropA": "APropA_value",
			...
		},
		...
	}],
	...
}

Needless to say that this JSON representation of an, expanded, payload doesn't look like what a typical JSON consumer would expect and it requiring the wrapped value to be expanded as well..

So what I'm looking at being able to do is, using the same example, do something like:

      <EntityType Name="ValueType">
        <Key>
          <PropertyRef Name="Key"/>
        </Key>
        <Property Name="Key" Type="Edm.String" Nullable="false"/>
        <Property Name="PropA" ... />
        ...
      </EntityType>

      <AnyStructuredType Name="ValueTypeDictionaryContainer">
        ...
        <NavigationProperty Name="Values" Type="Dictionary(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
        ...
      </AnyStructuredType>

And the resulting JSON payload for requests would look something like:

{
	"@odata.context": "$metadata#AnyStructuredType(Values)/$entity",
	...,
	"Values": {
		"foo": {
			"Key": "38hfgs8",
			"PropA": "APropA_value",
			...
		},
		"bar": {
			"Key": "f93d8r3",
			"PropA": "APropA_value",
			...
		},
		...
	},
	...
}

Note the more intuitive typical JSON response and that we don't need to expand the value in the wrapper any longer. 



--
This message was sent by Atlassian JIRA
(v6.2.2#6258)


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]