2011-01-11 4 views
0

최근에 작성한 WCF Restful 웹 서비스에 대한 질문을 게시했습니다. 입력으로 arbirtrary XSD를 사용하고 출력으로 HTML 양식을 스트리밍해야합니다. 다른 사람에게 도움 후, 나는 ,,, 동적으로 아래의 코드를 사용하여 XSD에서 C#을 파일을 생성하기 위해 XSD를 사용하는 방법리플렉션을 사용하여 C# 코드를 HTML로 변환해야합니다.

CodeNamespace codeNamespace = new CodeNamespace("generated"); 
XmlCodeExporter codeExporter = new XmlCodeExporter(codeNamespace); 

ArrayList maps = new ArrayList(); 
foreach (XmlSchemaType schemaType in xsd.SchemaTypes.Values) 
{ 
    maps.Add(schemaImporter.ImportSchemaType(schemaType.QualifiedName)); 
} 

foreach (XmlSchemaElement schemaElement in xsd.Elements.Values) 
{ 
    maps.Add(schemaImporter.ImportTypeMapping(schemaElement.QualifiedName)); 
} 
foreach(XmlTypeMapping map in maps) 
{ 
    codeExporter.ExportTypeMapping(map); 
} 

CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 
CodeParser parser = codeProvider. 

using(StringWriter w = new StringWriter()) 
{ 
    codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, new  CodeGeneratorOptions()); 
    writer.Write(w.GetStringBuilder().ToString()); 
} 

을 갔다 어떤이가에 대한 코드를 출력한다하고있다 입력 된 XSD를 나타내는 C# 파일 이것은 내가 중단 한 곳입니다. 생성 된 C# 코드에서 리플렉션을 사용하여 HTML 양식을 생성 할 수 있다고 알려졌습니다.

나는 몇 가지 우려 사항이 있습니다 ... 하나는 생성 된 코드가 여러 부분 클래스를 포함하고 있습니다. 리플렉션 사용에 영향을 미칩니 까? 그것이 영향을 미치지 않는다면, 생성 된 코드를 취하고 반사를 사용하여 출력물을 생성하는 가장 쉬운 방법은 무엇입니까? 나는 반성에 익숙하지 않고 내가 사용할 수있는 도구에 대해 잘 모르고 있기 때문에 가능한 모든 방법으로 도와주십시오. 길지만 생성 된 클래스의 생성 된 예제 코드가 포함되었습니다. 길이에 대해 사과하지만 모든 것을 보는 데 도움이 될 수 있습니다.

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
public partial class Leads { 
    private LeadsLead[] leadField; 
    private ulong vidField; 
    private ulong lidField; 
    private ulong aidField; 
    private bool aidFieldSpecified; 
    private string passwordField; 
    [System.Xml.Serialization.XmlElementAttribute("Lead")] 
    public LeadsLead[] Lead { get { return this.leadField; } set { this.leadField = value; } } 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public ulong vid { get { return this.vidField; } set { this.vidField = value; } } 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public ulong lid { get { return this.lidField; } set { this.lidField = value; } } 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public ulong aid { get { return this.aidField; } set { this.aidField = value; } } 
    [System.Xml.Serialization.XmlIgnoreAttribute()] 
    public bool aidSpecified { get { return this.aidFieldSpecified; } set { this.aidFieldSpecified = value; } } 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string password { get { return this.passwordField; } set { this.passwordField = value; } } } 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
public partial class LeadsLead { 
     private string firstNameField; 
     private string lastNameField; 
     private string addressField; 
     private string cityField; 
     private LeadsLeadState stateField; 
     private string zipField; 
     private string emailField; 
     private string primaryPhoneField; 
     private string loanAmountField; 
     private string balanceField; 



[System.Xml.Serialization.XmlIgnoreAttribute()] 
     public bool LoanTypeSpecified { get { return this.loanTypeFieldSpecified; } set { this.loanTypeFieldSpecified = value; } } 
     public string EstimatedValue { get { return this.estimatedValueField; } set { this.estimatedValueField = value; } } 
     public string LenderDate { get { return this.lenderDateField; } set { this.lenderDateField = value; } } 
     public string MobilePhone { get { return this.mobilePhoneField; } set { this.mobilePhoneField = value; } } 
     public bool OptOut { get { return this.optOutField; } set { this.optOutField = value; } } 
     [System.Xml.Serialization.XmlIgnoreAttribute()] 
     public bool OptOutSpecified { get { return this.optOutFieldSpecified; } set { this.optOutFieldSpecified = value; } } 
     public string SendComments { get { return this.sendCommentsField; } set { this.sendCommentsField = value; } } 
     public LeadsLeadVendorID VendorID { get { return this.vendorIDField; } set { this.vendorIDField = value; } } 
     [System.Xml.Serialization.XmlIgnoreAttribute()] 
     public bool VendorIDSpecified { get { return this.vendorIDFieldSpecified; } set { this.vendorIDFieldSpecified = value; } } 
     public System.DateTime CallTime { get { return this.callTimeField; } set { this.callTimeField = value; } } 
     [System.Xml.Serialization.XmlIgnoreAttribute()] 
     public bool CallTimeSpecified { get { return this.callTimeFieldSpecified; } set { this.callTimeFieldSpecified = value; } } 
     public string AdSource { get { return this.adSourceField; } set { this.adSourceField = value; } } 
     public LeadsLeadResult Result { get { return this.resultField; } set { this.resultField = value; } } 
     [System.Xml.Serialization.XmlIgnoreAttribute()] 
     public bool ResultSpecified { get { return this.resultFieldSpecified; } set { this.resultFieldSpecified = value; } } 
     public decimal Duration { get { return this.durationField; } set { this.durationField = value; } } 
     [System.Xml.Serialization.XmlIgnoreAttribute()] 
     public bool DurationSpecified { get { return this.durationFieldSpecified; } set { this.durationFieldSpecified = value; } } 
     public string ReviewStatus { get { return this.reviewStatusField; } set { this.reviewStatusField = value; } } 
     public string SubID { get { return this.subIDField; } set { this.subIDField = value; } } 
     public string Borrowers { get { return this.borrowersField; } set { this.borrowersField = value; } } 
     public string Loans { get { return this.loansField; } set { this.loansField = value; } } 
     [System.Xml.Serialization.XmlArrayItemAttribute("Driver", IsNullable=false)] 


public partial class LeadsLeadDriver { 
       private string firstNameField; 
      private string lastNameField; 
      public string FirstName { get { return this.firstNameField; } set { this.firstNameField = value; } } 
      public string LastName { get { return this.lastNameField; } set { this.lastNameField = value; } } } 
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")] 
     [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
     public enum LeadsLeadStandardState { AL, AK, AZ, AR, CA, CO, CT, DE, DC, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY, PR, NS, Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, [System.Xml.Serialization.XmlEnumAttribute("District of Columbia")] DistrictofColumbia, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, [System.Xml.Serialization.XmlEnumAttribute("New Hampshire")] NewHampshire, [System.Xml.Serialization.XmlEnumAttribute("New Jersey")] NewJersey, [System.Xml.Serialization.XmlEnumAttribute("New Mexico")] NewMexico, [System.Xml.Serialization.XmlEnumAttribute("New York")] NewYork, [System.Xml.Serialization.XmlEnumAttribute("North Carolina")] NorthCarolina, [System.Xml.Serialization.XmlEnumAttribute("North Dakota")] NorthDakota, Ohio, Oklahoma, Oregon, Pennsylvania, [System.Xml.Serialization.XmlEnumAttribute("Rhode Island")] RhodeIsland, [System.Xml.Serialization.XmlEnumAttribute("South Carolina")] SouthCarolina, [System.Xml.Serialization.XmlEnumAttribute("South Dakota")] SouthDakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, [System.Xml.Serialization.XmlEnumAttribute("West Virginia")] WestVirginia, Wisconsin, Wyoming, [System.Xml.Serialization.XmlEnumAttribute("Puerto Rico")] PuertoRico, [System.Xml.Serialization.XmlEnumAttribute("No State")] NoState, } 
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")] 
     [System.SerializableAttribute()] 
     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
     public enum LeadsLeadStatus { Pending, Working, Closed, Dead, } 

답변

4

나는 몇 가지 문제점이 있습니다. 하나는 생성 된 코드에 여러 개의 부분 클래스가 들어 있습니다. 리플렉션 사용에 영향을 미칩니 까?

모든 텍스트에서 하나의 질문을 봅니다. 답은 "아니오"입니다. 클래스는 소스에 정의되어 있기 때문에 partial은 반사에 전혀 영향을 미치지 않습니다. partial은 단순히 소스 코드 "trick"일뿐입니다. 그렇게하면 여러 소스 파일에 걸쳐 클래스 또는 메소드의 정의를 분할 할 수 있습니다. 컴파일러는 이러한 여러 정의를 끝에 하나의 클래스 나 메소드로 결합하며 반사는 볼 수없고 영향을받지 않습니다.

+0

최종 솔루션에 영향을 미치지 않는다는 것을 알아 주셔서 감사합니다. – TheJediCowboy

1

부분 클래스는 컴파일 타임에 결합됩니다. 생성 된 클래스에 대한 부분 반영은 전혀 영향을받지 않습니다.

관련 문제