in.net C#でオブジェクトにXMLファイルからデシリアライズすることができません:私はWCFでデータコントラクトクラスを以下している3.0 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>
お手数ですが、
Thanx shaileshは機能しましたが、その理由を説明できると本当に感謝しています。どのように良い形になっていませんでしたか?私たちが望むようにXMLを記述することができ、タグが作成され閉鎖されたので、なぜプロパティの詳細をarrayofpropertydetailsに変更するのでしょうか? –
Listをシリアル化しようとしているようです。この場合、XMLはで始まる必要があります。 –
Shailesh