[DataContractAttribute]
Roslyn CTP 構文を使用していくつかのプロパティを生成しようとしています。残念ながら、Roslyn は属性をプロパティと同じ行に配置しています。
ここに私が得るものがあります:
[DataContract]public int Id { get; set; }
[DataContract]public int? Age { get; set; }
私が達成したいこと:
[DataContract]
public int Id { get; set; }
[DataContract]
public int? Age { get; set; }
ジェネレーターのコード:
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))
)));
これらのプロパティをクラス、名前空間、そして最後に CompilationUnit でラップした後、次のコードを使用して文字列の結果を取得しています。
var compUnit = Syntax.CompilationUnit().WithMembers(...);
IFormattingResult fResult = compUnit.Format(new FormattingOptions(false, 4, 4));
string result = fResult.GetFormattedRoot().GetText().ToString();