не удалось десериализовать из XML-файла в объект в c # in.net 3.0 службы WCF - PullRequest
0 голосов
/ 28 марта 2012

у меня есть следующий класс контракта данных в WCF:

[DataContract]
public class PropertyDetails
{
    # region >>---> private members

        string city;        
        string propertyType;       
        double price;        
        string propertyClass;  

    # endregion

    #region >>---> public properties
        [DataMember]
        public string City
        {
            get { return city; }
            set { city = value; }
        }

        [DataMember]
        public string PropertyType
        {
            get { return propertyType; }
            set { propertyType = value; }
        }

        [DataMember]
        public double Price
        {
            get { return price; }
            set { price = value; }
        }

        [DataMember]
        public string PropertyClass
        {
            get { return propertyClass; }
            set { propertyClass = value; }
        } 
    #endregion
}

}

я создаю узлыв файле XML, используя следующий код:

public void insertPropertyRecord(string city, string propertyType, double price, string propertyClass)
    {
        XmlTextReader propertyRecordReader = new XmlTextReader(WebConfigurationManager.AppSettings["XMLPropertyRecords"]);
        XmlDocument xmlDocPropertyRecords = new XmlDocument();
        xmlDocPropertyRecords.Load(propertyRecordReader);
        propertyRecordReader.Close();

        XmlElement xmlPropertyRecordRootNode = xmlDocPropertyRecords.DocumentElement;
        if (!xmlPropertyRecordRootNode.HasChildNodes)
        {
            XmlElement xmlPropertyRecordNode = xmlDocPropertyRecords.CreateElement("propertyrecord");
            XmlElement xmlPropertyRecordChildNode = null;

                xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("city");
                xmlPropertyRecordChildNode.InnerText = city;
                xmlPropertyRecordNode.AppendChild(xmlPropertyRecordChildNode);

                xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("propertytype");
                xmlPropertyRecordChildNode.InnerText = propertyType;
                xmlPropertyRecordNode.AppendChild(xmlPropertyRecordChildNode);

                xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("price");
                xmlPropertyRecordChildNode.InnerText = Convert.ToString(price);
                xmlPropertyRecordNode.AppendChild(xmlPropertyRecordChildNode);

                xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("propertyclass");
                xmlPropertyRecordChildNode.InnerText = propertyClass;
                xmlPropertyRecordNode.AppendChild(xmlPropertyRecordChildNode);

            xmlPropertyRecordRootNode.AppendChild(xmlPropertyRecordNode);
        }
        else
        {
            XmlElement xmlPropertyRecordLastNode = (XmlElement)xmlPropertyRecordRootNode.LastChild;
            XmlElement xmlPropertyRecordChildNode = null;
                XmlElement xmlPropertyRecordNode = xmlDocPropertyRecords.CreateElement("propertyrecord");

                    xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("city");
                    xmlPropertyRecordChildNode.InnerText = city;
                    xmlPropertyRecordChildNode.AppendChild(xmlPropertyRecordChildNode);

                    xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("propertytype");
                    xmlPropertyRecordChildNode.InnerText = propertyType;
                    xmlPropertyRecordChildNode.AppendChild(xmlPropertyRecordChildNode);

                    xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("price");
                    xmlPropertyRecordChildNode.InnerText = Convert.ToString(price);
                    xmlPropertyRecordChildNode.AppendChild(xmlPropertyRecordChildNode);

                    xmlPropertyRecordChildNode = xmlDocPropertyRecords.CreateElement("propertyclass");
                    xmlPropertyRecordChildNode.InnerText = propertyClass;
                    xmlPropertyRecordChildNode.AppendChild(xmlPropertyRecordChildNode);

            xmlPropertyRecordLastNode.AppendChild(xmlPropertyRecordNode);
        }
        xmlDocPropertyRecords.Save(WebConfigurationManager.AppSettings["XmlPropertyRecords"]);
    }

Я пытаюсь получить узлы в объекте, используя десериализацию, используя следующий код:

XmlSerializer ser = new XmlSerializer(typeof(List<PropertyDetails>));
        TextReader sr = new StreamReader(WebConfigurationManager.AppSettings["XMLPropertyRecords"]);
        List<PropertyDetails> obj = new List<PropertyDetails>();
        obj = (List<PropertyDetails>)ser.Deserialize(sr);

, но я получаю ошибку в строке для десериализации как исключение недопустимой операции, созданное xml fie ниже:

<?xml version="1.0" encoding="utf-8"?>
<propertydetails>
  <propertyrecord>
    <City>delhi</City>
    <PropertyType>residential</PropertyType>
    <Price>4500000</Price>
    <PropertyClass>flat</PropertyClass>
  </propertyrecord>
</propertydetails>

, пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

Хорошо сформированный "XML-документ имеет правильный синтаксис XML.

Правила синтаксиса были описаны в предыдущих главах: • XML-документы должны иметь корневой элемент • XML-элементы должны иметь закрывающий тег • XML-теги чувствительны к регистру • XML-элементы должны быть правильно вложены • Значения атрибута XML должны быть в кавычках Tove Яни напоминание Не забудь меня в эти выходные!

0 голосов
/ 28 марта 2012

Кажется, XML не в хорошей форме. Попробуйте использовать XML, как указано ниже.

<ArrayOfPropertydetails>
  <Propertydetails>
    <City>delhi</City>
    <PropertyType>residential</PropertyType>
    <Price>4500000</Price>
    <PropertyClass>flat</PropertyClass>
  </Propertydetails>
</ArrayOfPropertydetails>
...