2011-01-11 2 views
0

Недавно я опубликовал вопрос о WCF Restful web-сервисе, который я пишу, что мне нужно взять 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()); 
} 

Что это делает выводит код для C#, который будет представлять XSD, который был введен. Здесь я остановился. Мне сообщили, что теперь я могу использовать отражение для создания HTML-формы из сгенерированного кода C#.

У меня есть пара проблем ... один из которых сгенерированный код содержит несколько частичных классов. Будет ли это влиять на отражение вообще? Если это не повлияет на него, тогда какой самый простой способ взять генерируемый код и начать использовать отражение на этом, чтобы генерировать вывод, который мне нужен? Я новичок в размышлениях и не знаю, какие инструменты мне доступны, поэтому, пожалуйста, помогите любым способом. Хотя и длинный, я включил сгенерированный пример кода из созданного класса. Я извиняюсь за длину, но это может помочь увидеть все.

[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 - это просто «трюк» исходного кода, если вы это сделаете, что позволит вам разбить определение класса или метода на несколько исходных файлов. Компилятор объединяет эти множественные определения в один класс или метод в конце, и отражение не может видеть и не влияет на этот факт.

+0

спасибо, что хорошо знать, что это не повлияет на конечное решение – TheJediCowboy

1

Частичные классы объединены при компиляции, при этом отражение по сгенерированным классам не будет затронуто.

Смежные вопросы