2

XML 文字列をオブジェクトのコレクションにシリアライズしたいのですが、最初のオブジェクトしか取得できません。xml にさらにオブジェクトを追加すると、エラーが発生します。何が欠けているのかわからない。タイプを Emp[] として宣言してみました

これが私の両方の「Emp」xml文字列です

string empsworking = "<?xml version='1.0' encoding='utf-8'?><Emp><EmpInfo><Code>vv</Code><FirstName>van</FirstName><LastName>sa</LastName><Destination>sc</Destination></EmpInfo><EmpInfo><Code>rr</Code><FirstName>ro</FirstName><LastName>sa</LastName><Destination>ph</Destination></EmpInfo></Emp>";

         string empsNotworking = "<?xml version='1.0' encoding='utf-8'?><Emp><EmpInfo><Code>vv</Code><FirstName>van</FirstName><LastName>sa</LastName><Destination>sc</Destination></EmpInfo></Emp>";

私のクラスは次のようになります

[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class Emp
{
    /// <remarks/>
   public EmpInfo EmpInfo { get; set; }
    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }

}

/// <remarks/>
[XmlRoot(ElementName = "EmpInfo")] 
public class EmpInfo
{

    /// <remarks/>
    public string Code;

    /// <remarks/>
    public string FirstName;

    /// <remarks/>
    public string LastName;

    /// <remarks/>
    public string Destination;
}

シリアル化する私のコードは

           StringReader stream = null;
       XmlTextReader reader = null;
        Emp empprofile;
       try
       {
           // serialise to object
           XmlSerializer serializer = new XmlSerializer(typeof(Emp));
           stream = new StringReader(emps); // read xml data
           reader = new XmlTextReader(stream);  // create reader
           // covert reader to object
           empprofile = (Emp)serializer.Deserialize(reader);
       }
       catch
       {
           return null;
       }
       finally
       {
           if (stream != null) stream.Close();
           if (reader != null) reader.Close();
       }

empworking でのみオブジェクトの読み取り/取得ができます。「EmpInfo」のコレクションとして取得するにはどうすればよいですか? ガイドしてください!

4

1 に答える 1

1

このようにしてみてください:

[TestFixture]
public class SerializeTest
{
    [Test]
    public void SerializeEmpTest()
    {
        EmpCollection empCollection = new EmpCollection()
            {
                new EmpInfo() {Code = "1", FirstName = "Anita"}, 
                new EmpInfo() {Code = "1", FirstName = "Johan"}
            };
        string xmlString = empCollection.GetXmlString();
    }
}

[XmlType, XmlRoot]
public class EmpCollection : List<EmpInfo>
{

}

[XmlType]
public class EmpInfo
{
    public string Code;

    public string FirstName;

}

public static class Extenstion
{
    public static string GetXmlString<T>(this T objectToSerialize)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(objectToSerialize.GetType());
        StringBuilder stringBuilder = new StringBuilder();
        string xml;
        using (var xmlTextWriter = new XmlTextWriter(new StringWriter(stringBuilder)))
        {
            xmlSerializer.Serialize(xmlTextWriter, objectToSerialize);
            xml = stringBuilder.ToString();
        }
        return xml;
    }
}
于 2012-10-21T12:45:38.870 に答える