アドバイザーのためにいくつかの詳細を保持するクラスがあります:
namespace MortgageApp_2
{
[KnownType(typeof(MortgageApp_2.AdviserDetails))]
[DataContractAttribute]
public class AdviserDetails
{
[DataMember()]
public string Consultant { get; set; }
[DataMember()]
public string Company { get; set; }
[DataMember()]
public string AddressOne { get; set; }
[DataMember()]
public string AddressTwo { get; set; }
[DataMember()]
public string City { get; set; }
[DataMember()]
public string County { get; set; }
[DataMember()]
public string Postcode { get; set; }
[DataMember()]
public string Telephone { get; set; }
}
}
次のコードは、AdviserDetailsをXMLに滅菌します。
StorageFolder folder = ApplicationData.Current.LocalFolder;
string fileName = "AdviserDetails.xml";
CreationCollisionOption options = CreationCollisionOption.ReplaceExisting;
try
{
var file = await folder.CreateFileAsync(fileName, options);
using (var stream = await file.OpenStreamForWriteAsync())
{
var ser = new DataContractSerializer(typeof(AdviserDetails));
ser.WriteObject(stream, adDetails);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
if (Debugger.IsAttached)
Debugger.Break();
throw;
}
作成されたXMlファイルは次のようになります。
<AdviserDetails xmlns="http://schemas.datacontract.org/2004/07/MortgageApp_2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><AddressOne>242 Office Block</AddressOne><AddressTwo>32 Hill Street</AddressTwo><City>Birmingham</City><Company>Best Mortgages</Company><Consultant>Bill Jones</Consultant><County>West Midlands</County><Postcode>B1 1AB</Postcode><Telephone>05100021300</Telephone></AdviserDetails>
次に、次のコードを使用して、XMLをAdviserDetailsタイプのオブジェクトに逆シリアル化します。
StorageFolder folder = ApplicationData.Current.LocalFolder;
string fileName = "AdviserDetails.xml";
string location = folder.Path + "\\" + fileName;
var file = await StorageFile.GetFileFromPathAsync(location).AsTask().ConfigureAwait(false);
var stream = await file.OpenStreamForReadAsync().ConfigureAwait(false);
var serializer = new XmlSerializer(typeof(AdviserDetails));
var loadAdviser = (AdviserDetails)serializer.Deserialize(stream.AsInputStream().AsStreamForRead());
ただし、最後の行:
var loadAdviser = (AdviserDetails)serializer.Deserialize(stream.AsInputStream().AsStreamForRead());
例外をスローします:
XMLドキュメント(1、2)にエラーがあります。
何が悪いのか、そしてアプリに読み取り可能なXMlファイルを作成させる方法を知っている人はいますか?
ありがとう!:)