Closed chunyu3 closed 6 months ago
same as HLC
public partial class TestModel
{
/// <summary> Initializes a new instance of TestModel. </summary>
public TestModel()
{
AdditionalProperties = new ChangeTrackingDictionary<string, object>();
}
/// <summary> Initializes a new instance of TestModel. </summary>
/// <param name="id"></param>
/// <param name="name"></param>
/// <param name="additionalProperties"> Additional Properties. </param>
internal TestModel(string id, string name, IDictionary<string, object> additionalProperties)
{
Id = id;
Name = name;
AdditionalProperties = additionalProperties;
}
/// <summary> Gets or sets the id. </summary>
public string Id { get; set; }
/// <summary> Gets or sets the name. </summary>
public string Name { get; set; }
/// <summary> Additional Properties. </summary>
public IDictionary<string, object> AdditionalProperties { get; }
}
public partial class TestModel : IUtf8JsonSerializable
{
void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
{
writer.WriteStartObject();
if (Optional.IsDefined(Id))
{
writer.WritePropertyName("id"u8);
writer.WriteStringValue(Id);
}
if (Optional.IsDefined(Name))
{
writer.WritePropertyName("name"u8);
writer.WriteStringValue(Name);
}
foreach (var item in AdditionalProperties)
{
writer.WritePropertyName(item.Key);
writer.WriteObjectValue(item.Value);
}
writer.WriteEndObject();
}
internal static TestModel DeserializeTestModel(JsonElement element)
{
if (element.ValueKind == JsonValueKind.Null)
{
return null;
}
Optional<string> id = default;
Optional<string> name = default;
IDictionary<string, object> additionalProperties = default;
Dictionary<string, object> additionalPropertiesDictionary = new Dictionary<string, object>();
foreach (var property in element.EnumerateObject())
{
if (property.NameEquals("id"u8))
{
id = property.Value.GetString();
continue;
}
if (property.NameEquals("name"u8))
{
name = property.Value.GetString();
continue;
}
additionalPropertiesDictionary.Add(property.Name, property.Value.GetObject());
}
additionalProperties = additionalPropertiesDictionary;
return new TestModel(id.Value, name.Value, additionalProperties);
}
}
var additionalProps = new AdditionalPropertiesWithRawData("name")
{
additionalProperties = { { "time", "12:00" }, { "age", 12 } }
};
In HLC, additinalProperties is Dictionary<string, object>, in DPG it will be Dictionary<string, BinaryData>
Need to clarify the meaning of 'model A extends/is Record < string >'
option 1:
model Foo {
known: string;
additionalProperties: Record
Typespec definition is not ready.
remaining task: in emitter, parse the AdditionalPreooperties typspec type to Dictionary InputType
DPG will support a model which may contain addition properties.
AdditionalProperties definition in spec
model Foo is Record {
@doc("The name property")
known: string;
}