11
I am trying to generate a few properties with [DataContractAttribute] using Roslyn CTP Syntax. Unfortunately, Roslyn puts the attribute on the same line as the property.
Here is what I get:
[DataContract]public int Id { get; set; }
[DataContract]public int? Age { get; set; }
What I would like to achieve:
[DataContract]
public int Id { get; set; }
[DataContract]
public int? Age { get; set; }
Generator's code:
string propertyType = GetPropertyType();
string propertyName = GetPropertyName();
var property = Syntax
.PropertyDeclaration(Syntax.ParseTypeName(propertyType), propertyName)
.WithModifiers(Syntax.TokenList(Syntax.Token(SyntaxKind.PublicKeyword)))
.WithAttributeLists(
Syntax.AttributeList(
Syntax.SeparatedList<AttributeSyntax>(
Syntax.Attribute(Syntax.ParseName("DataContract")))))
.WithAccessorList(
Syntax.AccessorList(
Syntax.List(
Syntax.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
.WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken)),
Syntax.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration)
.WithSemicolonToken(Syntax.Token(SyntaxKind.SemicolonToken))
)));
After wrapping those properties in a class, a namespace and finally CompilationUnit, I am using the following code to get the string result:
var compUnit = Syntax.CompilationUnit().WithMembers(...);
IFormattingResult fResult = compUnit.Format(new FormattingOptions(false, 4, 4));
string result = fResult.GetFormattedRoot().GetText().ToString();