标签: datacontractserializer

"此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
查看次数

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

我开发(重写到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
查看次数

RuntimeType:http://schemas.datacontract.org/2004/07/System'不是预期的

好的,我让DataContractSerializer使用我的对象图.有关更多信息,请参阅我之前的问题

树结构的序列化/ Derialization

反序列化器没有任何知道映射到此契约的类型

但是,我的一个字段_UserPropertyDefinitions的定义如下所示.它定义了此用户可以添加到数据结构中的对象的自定义属性列表.字符串是标识属性的唯一键,Type是属性的类型,它始终是一个主要类型,如Bool,Int,String等.

每个对象都有一个对应的Dictionary(String key,Object value)集合,用于存储为任何"用户属性"设置的值.

[DataMember]
private Dictionary<string, Type> _UserPropertyDefinitions;
Run Code Online (Sandbox Code Playgroud)

当此属性为空集合时,我的对象图序列化很好,但是当我向此集合添加自定义属性时,在尝试使用DataContractSerializer进行序列化时会出现以下异常.

输入数据合约名称为'RuntimeType:http://schemas.datacontract.org/2004/07/System '的'System.RuntimeType' 不是预期的.将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.

如果我删除此字段的DataMember属性,我可以序列化/反序列化而不会获得异常,但当然我放弃了我在此字段中创建的设置.

c# datacontractserializer

7
推荐指数
1
解决办法
9307
查看次数

DataContractSerializer序列化List <T>获取错误

我目前正在尝试序列化List,它序列化(我认为很好),但是当它反序列化时,

很抱歉代码的数量,但我真的卡住了,不知道为什么会发生这种情况,我也试图将结构改成一个类而没有帮助.

谢谢.

我得到以下错误更新

    There was an error deserializing the object of type There was an error deserializing the object of type 
`System.Collections.Generic.List`1[[A.B.C.DataValues, A.V, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. Unexpected end of file. Following elements are not closed: Time, DataValues, ArrayOfDataValues.`
Run Code Online (Sandbox Code Playgroud)

我像这样更新了序列化

     public void SerializeDataValue(List<DataValues> values)
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(List<DataValues>));

                using (MemoryStream stream = new MemoryStream())
                {
                    using (GZipStream compress = new GZipStream(stream, CompressionMode.Compress))
                    {
                        XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter(compress);
                        serializer.WriteObject(w, values);

                    }
                    _serializedData = stream.ToArray();
                }
            } …
Run Code Online (Sandbox Code Playgroud)

c# serialization datacontractserializer

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

DataContract模型绑定到ASP.NET MVC操作方法参数中的JSON

MVC3开箱即用JsonValueProviderFactory(),它非常方便将传入的JSON绑定到模型.不幸的是,我无法弄清楚如何设置名称与传入JSON不同的模型合同.例如:

[DataContract(Name = "session")]
public class FacebookSession
{
    [DataMember(Name = "access_token")]
    public string AccessToken { get; set; }

    [DataMember(Name = "expires")]
    public int? Expires { get; set; }

    [DataMember(Name = "secret")]
    public string Secret { get; set; }

    [DataMember(Name = "session_key")]
    public string Sessionkey { get; set; }

    [DataMember(Name = "sig")]
    public string Signature { get; set; }

    [DataMember(Name = "uid")]
    public string UserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

传入表示facebook会话的json对象时,属性secret和expires正确绑定,但其余部分没有,因为属性名称与json键名称不同.我希望datacontract序列化程序可以尝试绑定到属性中提供的名称,但似乎并非如此.有没有人有任何解决方法的建议?

编辑

我将如何使用此模型的示例:

    public ActionResult Log(int? custId, FacebookSession response)
    {       
          ViewBag.Id …
Run Code Online (Sandbox Code Playgroud)

c# model-binding datacontractserializer modelbinders asp.net-mvc-3

7
推荐指数
1
解决办法
6844
查看次数

使用DataContractSerializer时,忽略运行时的某些属性

我正在使用DataContractSerializer使用DataMember属性将对象序列化为XML(仅公共属性被序列化).
是否可以动态忽略某些属性,以便它们不会包含在XML输出中?

例如,允许用户在某个列表控件中选择所需的xml元素,然后仅序列化用户选择的那些元素,排除所有未选择的元素.

谢谢

.net serialization datacontractserializer

7
推荐指数
1
解决办法
3360
查看次数

如何在使用ASP.NET MVC Web API时注册已知类型以进行序列化

我有一个返回的ASP.NET MVC Web API控制器 public IEnumerable<IMessage> Get()

它抛出异常,我需要注册从IMessage传递给已知类型集合派生的类型DataContractSerializer.

如何注册"已知类型"为使用DataContractSerializerDataContractJSONSerializer在MVC的Web API项目?

KnownType属性不能放在接口上.

c# asp.net-mvc datacontractserializer asp.net-web-api

7
推荐指数
1
解决办法
8526
查看次数

例外:对象图中可以序列化或反序列化的最大项数为'65536'

我查看了其他帖子,但我找不到解决问题的方法.

我的服务配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <appSettings>
    ...
  </appSettings>
  <log4net>
    ...
  </log4net>
  <system.serviceModel>
    <protocolMapping>
      <add scheme="http" binding="wsDualHttpBinding"/>
    </protocolMapping>
    <services>
      <service name="Service1" behaviorConfiguration="Service1Behavior">
        <endpoint address="" binding="netTcpBinding" contract="IService1" bindingConfiguration="NetTcpBinding_IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
      </service>
      <service name="Service2" behaviorConfiguration="Service2Behavior">
        <endpoint address="" binding="wsHttpBinding" contract="IService2" bindingConfiguration="WSHttpBinding_IService2">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IService2" receiveTimeout="00:00:10"
          sendTimeout="00:00:10" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          useDefaultWebProxy="false">
          <reliableSession ordered="true" inactivityTimeout="00:00:11" />
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" …
Run Code Online (Sandbox Code Playgroud)

c# wcf serialization visual-studio-2010 datacontractserializer

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

Web API - 自我关闭标记而不是i:nil

我正在使用带有DataContract序列化的Web API .输出如下所示:

<Data>
<Status>
  <Date>2014-08-13T00:30:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
<Status>
  <Date>2014-08-13T01:00:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
<Status>
  <Date>2014-08-13T01:30:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
<Status>
  <Date>2014-08-13T02:00:00</Date>
  <ID>312</ID>
  <Option>No Limitation</Option>
  <Value i:nil="true" />
</Status>
Run Code Online (Sandbox Code Playgroud)

通过执行以下操作,我能够删除所有额外的命名空间:

[DataContract(Namespace="")]
public class Status
Run Code Online (Sandbox Code Playgroud)

但剩下的唯一属性是i:nil属性.我该怎么做才能删除i:nil属性?

c# datacontractserializer asp.net-web-api

7
推荐指数
2
解决办法
4994
查看次数

继承类的输出无效

我有2节课

[DataContract, KnownType(typeof(B))]
public class A
{
    [DataMember]
    public string prop1 { get; set; }
    [DataMember]
    public string prop2 { get; set; }
    [DataMember]
    public string prop3 { get; set; }
}

[DataContract]
public class B : A
{
    [DataMember]
    public string prop4 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及以下方法:

List<B> BList = new List<B>();
BList = new List<B>() { new B() { prop1 = "1", prop2 = "2", prop3 = "3", prop4 = "4" } };
List<A> AList = BList.Cast<A>().ToList(); …
Run Code Online (Sandbox Code Playgroud)

c# xml inheritance datacontractserializer

7
推荐指数
1
解决办法
203
查看次数