[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
[ https://issues.oasis-open.org/browse/ODATA-1034?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=65690#comment-65690 ] Ralf Handl edited comment on ODATA-1034 at 3/22/17 8:11 AM: ------------------------------------------------------------ I like the combination of 2) with a predefined open complex type "Core.Dictionary" without properties. This would allow to have ... <Property Name="MyDictionary" Type="Core.Dictionary> <Annotation Term="OpenPropertyTypeConstraint"> <Collection> <String>self.someType</String> </Collection> </Annotation> </Property> In JSON payloads this would then be "MyDictionary": { "foo": <instance of self.someType>, "bar": <another instance of self.someType>, ... } was (Author: handl): I like the combination of 2) with a predefined open complex type "Core.Dictionary" without properties. This would allow to have ... <Property Name="MyDictionary" Type="Core.Dictionary> <Annotation Term="OpenPropertyTypeConstraint"> <Collection> <String>self.someType</String> </Collection> </Annotation> </Property> > 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: CSDL JSON , CSDL XML, JSON Format, Protocol, URL Conventions > Affects Versions: V4.01_CSD01 > Reporter: Hubert Heijkers > Assignee: Hubert Heijkers > Fix For: V4.01_CSD02 > > > 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]