Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

58 lines
1.7 KiB
C#

// <copyright>
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
namespace System.Activities.XamlIntegration
{
using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
// Exposes a DC-serializable type as IXmlSerializable so it can be serialized to XAML using x:XData
internal class NetDataContractXmlSerializable<T> : IXmlSerializable where T : class
{
public NetDataContractXmlSerializable(T value = null)
{
this.Value = value;
}
public T Value
{
get;
private set;
}
public XmlSchema GetSchema()
{
throw FxTrace.Exception.AsError(new NotSupportedException(SR.CannotGenerateSchemaForXmlSerializable(typeof(T).Name)));
}
public void ReadXml(XmlReader reader)
{
NetDataContractSerializer serializer = this.CreateSerializer();
this.Value = (T)serializer.ReadObject(reader);
}
public void WriteXml(XmlWriter writer)
{
if (this.Value != null)
{
NetDataContractSerializer serializer = this.CreateSerializer();
serializer.WriteObject(writer, this.Value);
}
}
private NetDataContractSerializer CreateSerializer()
{
NetDataContractSerializer result = new NetDataContractSerializer();
// The version-tolerant fallback of Simple is closer to the semantics of XAML
result.AssemblyFormat = FormatterAssemblyStyle.Simple;
return result;
}
}
}