标签: datacontractserializer

DataContractSerializer:如何序列化没有DataContract/DataMember属性的类/成员

DataContractSerializer要求使用DataContractDataMember属性标记类和成员.但是,在我的情况下,使用EFPocoAdapater框架自动生成类,并且这些属性不存在.

如何在没有这些属性的情况下使用DataContractSerializer强制序列化所有成员?

来自Alexdej:

这改变了3.5SP1,希望你看到:http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx

serialization entity-framework datacontractserializer efpocoadapter

9
推荐指数
1
解决办法
1万
查看次数

我可以使用DataContract序列化程序序列化Dictionary <string,object>吗?

我打算构建一个WCF服务,返回序列化为JSON的通用字典对象.不幸的是,序列化失败,因为对象可能总是不同.KnownTypes无法帮助,因为属性类型是Dictionary,我不能说KnownType,因为类可能总是不同.

如果有可能序列化"未知类型"的任何想法?

我不介意为每个类指定DataContract/DataMember,但(至少对于原型版本)我不希望每个响应都有强类型.Javascript客户端只是不在乎.

匿名课怎么样?

wcf serialization json datacontractserializer

9
推荐指数
1
解决办法
8828
查看次数

DataContractSerializer,KnownType和继承

我读过很多关于已知类型的文章,我相信我的例子应该有用.但事实并非如此.我在反序列化时遇到以下异常,并且不明白为什么:

第1行位置出错2.期望命名空间' http://schemas.datacontract.org/2004/07/ConsoleApplication2 '中的元素'A' .遇到名为'C'的'Element',命名空间' http:// schemas .datacontract.org/2004/07/ConsoleApplication2 '.

using System;
using System.Runtime.Serialization;
using System.Xml;
using System.IO;

namespace ConsoleApplication2
{
    [DataContract][KnownType(typeof(C))]class A { }
    [DataContract]class C : A { }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new C();
            string data;

            var serializer = new DataContractSerializer(a.GetType());
            using (var sw = new StringWriter())
            {
                using (var xw = new XmlTextWriter(sw))
                    serializer.WriteObject(xw, a);
                data = sw.ToString();
            }

            serializer = new DataContractSerializer(typeof(A));
            using (var sr = new StringReader(data))
            using …
Run Code Online (Sandbox Code Playgroud)

.net serialization datacontractserializer known-types

8
推荐指数
1
解决办法
5294
查看次数

web.config中的WCF服务dataContractSerializer maxItemsInObjectGraph

我在主机的web.config中指定dataContractSerializer maxItemsInObjectGraph时遇到问题.

 <behaviors>
  <serviceBehaviors>
    <behavior name="beSetting">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="True" />
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
 <services>
  <service name="MyNamespace.MyService"
           behaviorConfiguration="beSetting" >
    <endpoint address="http://localhost/myservice/"
              binding="webHttpBinding"
              bindingConfiguration="webHttpBinding1"
              contract="MyNamespace.IMyService"
              bindingNamespace="MyNamespace">
    </endpoint>
  </service>
</services>
Run Code Online (Sandbox Code Playgroud)

以上对我的数据拉动没有影响.由于数据量很大,服务器超时.

但是,我可以在代码中指定最大限制并且有效

  [ServiceBehavior(MaxItemsInObjectGraph=2147483646, IncludeExceptionDetailInFaults = true)]
  public abstract class MyService : MyService 
  {
   blah...
 }
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么我不能通过web.config设置来完成这项工作?我想保留在web.config中,以便将来更新.

wcf web-config datacontractserializer servicebehavior

8
推荐指数
1
解决办法
2万
查看次数

"此XmlReader不支持ReadElementContentAsBase64方法"

using System.IO;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace XmlTest
{
    class TestClass : IXmlSerializable
    {
        public XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(XmlReader reader)
        {
            var data = new byte[3];
            reader.ReadStartElement();
            reader.ReadElementContentAsBase64(data, 0, data.Length);
        }

        public void WriteXml(XmlWriter writer)
        {
            var data = new byte[] { 1, 2, 3 };
            writer.WriteBase64(data, 0, data.Length);
        }

        public static void Main()
        {
            var serializer = new DataContractSerializer(typeof(TestClass));

            var stringWriter = new StringWriter();
            using (var writer = XmlWriter.Create(stringWriter))
            { …
Run Code Online (Sandbox Code Playgroud)

.net serialization datacontractserializer ixmlserializable

8
推荐指数
2
解决办法
1931
查看次数

NetDataContractSerializer与DataContractSerializer

我们有一个应用程序,包含我们希望在数据库中序列化的对象.
目前我们正在使用NetDataContractSerializer,但最近发现,由于涉及的.Net类型信息,它创建了大量文件,这意味着应用程序缓慢,即使对于基本对象.
我们正在考虑DataContractSerializer改用,我一直在寻找两者的比较,但没找到.

  • 两者创建的对象之间的大小差异是什么?
  • 有很大的性能差异吗?
  • 当我有一个包含a的对象时,它们中的任何一个都有问题List<X>,其中包含X多个其他对象,以便列表在运行时包含许多不同的类型?(我被告知DataContractSerializer可以赋予KnownTypes属性,但这意味着代码中存在更多依赖关系.有没有办法DataContractSerializer在我的解决方案中了解所有类型?)

谢谢.

datacontractserializer netdatacontractserializer

8
推荐指数
1
解决办法
5938
查看次数

如何在.NET中自定义JSON枚举的反序列化?

我有以下示例C#代码,它们使用svcutils.exe应用程序从xsd自动生成.

    [DataContract]
    public enum Foo
    {
        [EnumMember(Value = "bar")]
        Bar = 1,

        [EnumMember(Value = "baz")]
        Baz = 2
    }

    [DataContract]
    public class UNameIt
    {
        [DataMember(Name = "id")]
        public long Id { get; private set; }

        [DataMember(Name = "name")]
        public string Name { get; private set; }

        [DataMember(Name = "foo")]
        public Foo Foo { get; private set; }
    }
Run Code Online (Sandbox Code Playgroud)

以下是单元测试,尝试将示例JSON文档反序列化为UNameIt类.

    [TestClass]
    public class JsonSerializer_Fixture
    {
        public const string JsonData = @"{ ""id"":123456,
                                           ""name"":""John Doe"",
                                           ""foo"":""Bar""}";

        [TestMethod]
        public void DataObjectSimpleParseTest()
        {
            DataContractJsonSerializer …
Run Code Online (Sandbox Code Playgroud)

c# wcf json xsd datacontractserializer

8
推荐指数
1
解决办法
1万
查看次数

由于XML节点的排序不正确,DataContract反序列化失败

我对DataContractSerializer的行为感到困惑.我们的配置基于XML.XML用作DataContractSerializer.ReadObject方法的源.最近,当没有设置反序列化对象的某些属性时,我遇到了一个问题.我已跟踪更改并发现这些属性已手动添加到XML中.在我看来哪个好.显然,在DataContractSerializer看来它不行,因为它似乎期望XML节点按字母顺序排序.真?!反序列化似乎非常简单 - 按顺序读取XML,解析节点名称,设置相应的属性.订购的目的是什么?

有解决方法吗?也许是DataContractSerializer的某种设置?

c# xml wcf datacontractserializer

8
推荐指数
1
解决办法
1858
查看次数

数据协定已知类型和一组相互继承的接口

我开发(重写到WCF)文件解析Web服务接受string[]和返回ISection[]但实际上这是一组嵌套接口:

namespace Project.Contracts // Project.Contracts.dll
{
    public interface ISection { }

    public interface ISummarySection : ISection { }

    public interface IDataSection : ISection { }
}
Run Code Online (Sandbox Code Playgroud)

和班级:

namespace Project.Format.A // Project.Format.A.dll
{
    [DataContract]
    public class SummarySectionFormatA : ISummarySection { }

    [DataContract]
    public class DataSectionFormatA : IDataSection { }
}
Run Code Online (Sandbox Code Playgroud)

服务接口及其实现:

[ServiceContract]
public interface IService // Project.Contracts.dll
{
    ISection[] Parse(string format, string[] data);
} 

[ServiceKnownType(typeof(SummarySectionFormatA))] // tried this also
[ServiceKnownType(typeof(DataSectionFormatA))]
public class Service : IService // Project.Service.dll …
Run Code Online (Sandbox Code Playgroud)

c# wcf exception-handling datacontractserializer known-types

8
推荐指数
1
解决办法
2255
查看次数

我可以在不参考类型的情况下反序列化泛型吗?

我试图将类保存/加载到包含使用a的泛型类型的xml文件DataContractSerializer.我有保存工作,但已经意识到我无法加载它,因为我没有解串器的knownTypes列表.

有没有一种序列化/反序列化这个类的方法,允许我反序列化它而不直接引用任何存储的类型?

这是我SessionVariables要保存/加载的课程:

[DataContract]
public class SessionVariables
{
    [DataMember]
    private Dictionary<Type, ISessionVariables> _sessionVariables = new Dictionary<Type, ISessionVariables>();
    private object _syncLock = new object();

    public T Get<T>()
        where T : ISessionVariables, new()
    {
        lock (_syncLock)
        {
            ISessionVariables vars = null;

            if (_sessionVariables.TryGetValue(typeof(T), out vars))
                return (T)vars;

            vars = new T();
            _sessionVariables.Add(typeof(T), vars);

            return (T)vars;
        }
    }

    public IList<Type> GetKnownTypes()
    { 
        IList<Type> knownTypes = new List<Type>();

        knownTypes.Add(this.GetType().GetType()); // adds System.RuntimeType

        foreach (Type t in _sessionVariables.Keys)
        {
            if (!knownTypes.Contains(t)) …
Run Code Online (Sandbox Code Playgroud)

c# datacontractserializer .net-3.5

8
推荐指数
1
解决办法
1213
查看次数