2017-07-26 4 views
0

"Input string is not format format"というエラーが発生しました。呼び出すことxml linqからのクラスの配列のデータがFormatExceptionになります。

<?xml version="1.0" encoding="utf-8" ?> 
    <employees> 
     <employee id="1"> 
     <First_Name>Jane</First_Name> 
     <Last_Name>Doe</Last_Name> 
     <Classification_Group>AA</Classification_Group> 
     <Classification_Level>02</Classification_Level> 
     <Postion_Number>12345</Postion_Number> 
     <English_Title>Bob</English_Title> 
     <French_Title></French_Title> 
     <Location>Null Island</Location> 
     <Language>English</Language> 
     <Department_ID>000001</Department_ID> 
     <Status>1</Status> 
     <Type>4</Type> 
     </employee> 
</employees> 
+0

は、エラー – RoguePlanetoid

+2

あなたは 'x.Element(「ステータス」)を有するを引き起こしているものを見つけるために、一度に一つにコメントすべての行をコメントアウトしてみてくださいでした。ToStringメソッド()'これはx.Element( "Status")、Value.ToString() 'でなければなりません。 – Valeklosse

+0

'XElement.Value'の型が' string'であるか、単に変換を使用すると 'x.Element(" Status ").Value':'(string)x.Element( "Status") '〜文字列の値を取得するか、より良い方法ですが、 'XElement'から' int': '(int)' x.Element( "Status") 'への変換を使用するだけです。 –

答えて

1

で複数の不足しているプロパティを報告することがあり、以下のコードを参照してください。修正は次のとおりでした:xdoc.Root.Descendants( "employee");私はまた、他の改善

public class Employee 
    { 
     static Employee[] Employees = null; 

     const string FILENAME = @"c:\temp\test.xml"; 
     public static Boolean IsPostBack = false; 

     string Employee_ID { get; set; } 
     string First_Name { get; set; } 
     string Last_Name { get; set; } 
     string Classification_Group { get; set; } 
     string Classification_Level { get; set; } 
     string Postion_Number { get; set; } 
     string English_Title { get; set; } 
     string French_Title { get; set; } 
     string Location { get; set; } 
     string Language { get; set; } 
     string Department_ID { get; set; } 
     int Status { get; set; } 
     int Type { get; set; } 
     Boolean Displayed { get; set; } 


     //protected void Page_Load(object sender, EventArgs e) 
     public void Page_Load() 
     { 
      if (!IsPostBack) 
      { 
       XDocument xdoc = XDocument.Load(FILENAME); 
       IEnumerable<XElement> emps = xdoc.Root.Descendants("employee"); 

       Employees = emps.Select(x => new Employee() 
       { 
        Employee_ID = (string)x.Attribute("id"), 
        First_Name = (string)x.Element("First_Name"), 
        Last_Name = (string)x.Element("Last_Name"), 
        Classification_Group = (string)x.Element("Classification_Group"), 
        Classification_Level = (string)x.Element("Classification_Level"), 
        Postion_Number = (string)x.Element("Postion_Number"), 
        English_Title = (string)x.Element("English_Title"), 
        French_Title = (string)x.Element("French_Title"), 
        Location = (string)x.Element("Location"), 
        Language = (string)x.Element("Language"), 
        Department_ID = (string)x.Element("Department_ID"), 
        Status = (int)x.Element("Status"), 
        Type = (int)x.Element("Type"), 
        Displayed = false 
       }).ToArray(); 
      } 
     } 
    } 
2

:エラー...

Employeeクラスは、すべてのステータス(int型)、タイプ(INT)を除く文字列として行くの表示(ブール値)

public partial class Version2 : System.Web.UI.Page { 

     private Employee[] Employees; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       XDocument xdoc = XDocument.Load(Server.MapPath("~/")+ "V2Employees.xml"); 
       IEnumerable<XElement> emps = xdoc.Root.Descendants(); 

       Employees = emps.Select(x => new Employee() 
       { 
        Employee_ID = x.Attribute("id").Value, 
        First_Name = x.Element("First_Name").Value, 
        Last_Name = x.Element("Last_Name").Value, 
        Classification_Group = x.Element("Classification_Group").Value, 
        Classification_Level = x.Element("Classification_Level").Value, 
        Postion_Number = x.Element("Postion_Number").Value, 
        English_Title = x.Element("English_Title").Value, 
        French_Title = x.Element("French_Title").Value, 
        Location = x.Element("Location").Value, 
        Language = x.Element("Language").Value, 
        Department_ID = x.Element("Department_ID").Value, 
        Status = int.Parse(x.Element("Status").ToString()), 
        Type = int.Parse(x.Element("Type").ToString()), 
        Displayed = false}).ToArray(); 
     } 

例のXMLですXElementにあるToStringの場合、要素全体が文字列として終了します。

<Status>4</Status> 

...そして、それをintとして解析しようとしています。私は強くお勧めします:あなたは(後でToStringコールは必要ありません)文字列としての要素の値をしたいとき

  • ちょうどstringValueプロパティやキャストを使用して
  • キャストを使用してintにするとき

    // Property names adjusted to .NET naming conventions, type of 
    // PositionNumber changed to an int. 
    Employees = emps.Select(x => new Employee 
    { 
        EmployeeId = (string) x.Attribute("id"), 
        FirstName = (string) x.Element("First_Name"), 
        LastName = (string) x.Element("Last_Name"), 
        ClassificationGroup = (string) x.Element("Classification_Group"), 
        ClassificationLevel = (string) x.Element("Classification_Level"), 
        PositionNumber = (int) x.Element("Postion_Number"), 
        EnglishTitle = (string) x.Element("English_Title"), 
        FrenchTitle = (string) x.Element("French_Title"), 
        Location = (string) x.Element("Location"), 
        Language = (string) x.Element("Language"), 
        DepartmentId = (string) x.Element("Department_ID"), 
        Status = (int) x.Element("Status"), 
        Type = (int) x.Element("Type"), 
        Displayed = false 
    } 
    
    :あなたは整数

XElementの値を変換したい私はあなたのようSelectを記述します

stringへのキャストの代わりに.Valueを使用すると、要素に適切なサブ要素がない場合は、NullReferenceExceptionが返されます。あなたはそれがすべての必要な情報があることを確認してValidateメソッドを持って、その後、代わりに上記のフォームを使用することをお勧めします - おそらくあなたがより明確にエラーを報告できるようになる:

  • あなたがかなり不足しているプロパティ言うことができますただ例外
  • を得るよりも、あなたは、単一のエラーメッセージ
関連する問題