标签: datacontract

将DataMember添加到WCF中的现有DataContract

我想DataMember在我DataContract的一个中添加一个.我想知道DataMember如果没有更新其中一方,现有服务器和客户端将如何在新的情况下运行.

我记得有一种方法可以DataMember选择,但我想知道它是否适用于所有场景:

  • 更新了Client => old Server
  • 旧客户端=>更新服务器
  • 更新的客户端<=旧服务器
  • 旧客户端<=已更新服务器

.net wcf datacontract datamember isrequired

12
推荐指数
1
解决办法
4386
查看次数

在运行时针对TypeScript中的接口验证"任何"对象

我正在使用typescript处理应用程序的UI.与此同时,其他人也在为我提供数据.我们就数据合同达成了一致意见,但是这个过程很容易出错,我不断从服务器获取无效的数据对象.所以我的问题是我可以使用typescript中定义的一些接口以某种方式验证动态对象(在运行时)吗?


这个问题是在2012年提出的,因此它不能重复检查一个对象是否在运行时使用 2015年提出的TypeScript实现了一个接口.

validation ajax datacontract typescript

12
推荐指数
2
解决办法
7370
查看次数

设计SOA WCF Web服务时的最佳实践是什么?

给定运营合同,例如:

[OperationContract]
void Operation(string param1, string param2, int param3);
Run Code Online (Sandbox Code Playgroud)

这可以重新设计为:

[MessageContract]
public class OperationRequest
{
    [MessageBodyMember]
    public string Param1 { get; set; }

    [MessageBodyMember]
    public string Param2 { get; set; }

    [MessageBodyMember]
    public int Param3 { get; set; }
}

[MessageContract]
public class OperationResponse
{
}

[OperationContract]
OperationResponse Operation(OperationRequest request);
Run Code Online (Sandbox Code Playgroud)

我喜欢MessageContract的一件事是我对SOAP消息的格式有了更明确的控制.

同样,我可以编写几乎相同的代码,但使用DataContract:

[DataContract]
public class OperationRequest
{
    [DataMember]
    public string Param1 { get; set; }

    [DataMember]
    public string Param2 { get; set; }

    [DataMember]
    public int Param3 { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# wcf web-services datacontract

11
推荐指数
2
解决办法
8962
查看次数

为什么我不能在同一个类上使用WCF DataContract和ISerializable?

我有一个类,我需要能够序列化到SQLServer会话变量并通过WCF服务可用.我已将其声明如下

namespace MyNM
{
[Serializable] 
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]

public class Foo : IEntity, ISafeCopy<Foo>
{
    [DataMember(Order = 0)] 
    public virtual Guid Id { get; set; }

    [DataMember(Order = 1)] 
    public virtual string a { get; set; }

    DataMember(Order = 2)]
    public virtual Bar c { get; set; }

    /* ISafeCopy implementation */
}


[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
    #region Implementation of IEntity

    DataMember(Order = 0)]
    public virtual …
Run Code Online (Sandbox Code Playgroud)

c# wcf asp.net-3.5 datacontract serializable

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

Json解析F#

R 7 "NETFramework\V4.0 \资料\客户\ System.Runtime.Serialization.dll"

open System.Runtime.Serialization
open System.Runtime.Serialization.Json

[<DataContract>]
    type geo = {
        [<field: DataMember(Name = "type")>]
        t:string
        [<field: DataMember(Name = "coordinates")>]
        coordinates:string
        }


let decode (s:string)  = 
    let json = new DataContractJsonSerializer(typeof<geo>)
    let byteArray = Encoding.UTF8.GetBytes(s)
    let stream = new MemoryStream(byteArray)
    json.ReadObject(stream) :?> geo

let tw = {"type":"Point","coordinates":[-7.002648,110.449961]}

decode tw 
Run Code Online (Sandbox Code Playgroud)

这将从命名空间''expect返回 - > End元素'坐标'.从命名空间''找到元素'item'

如何定义DataMember坐标以便它理解?

非常感谢

f# json datacontract

11
推荐指数
2
解决办法
3072
查看次数

在测试我的WCF服务时如何将值传递给List <string>属性?

我正在测试一个接受DC类型参数的WCF服务方法,我的一些DC属性是List类型.我如何传递值,我在""中尝试过字符串,不接受,请参阅附带的截图.在此输入图像描述

附带的屏幕截图中的AdjReason是List类型.希望我对我的问题很清楚.

谢谢,阿达什

list datacontract wcftestclient visual-studio-2010 wcf-client

11
推荐指数
1
解决办法
6746
查看次数

DataContractSerializer:在流中找不到引用ID为'xyz'的反序列化对象.如何恢复数据?

我使用DataContractSerializer将一个对象数组持久保存到文件中.直到最近,当我开始收到以下消息时,它一直工作正常.

Deserialized object with reference id '15' not found in stream
   bei System.Runtime.Serialization.XmlObjectSerializerReadContext.GetExistingObject(String id, Type type, String name, String ns)
   bei ReadAbgleichSettingsFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[] )
   bei System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
   bei System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader)
   bei System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract)
   bei System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, String name, String ns)
   bei ReadUnitOfTestFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[] )
   bei System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
   bei System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) …
Run Code Online (Sandbox Code Playgroud)

.net datacontract

11
推荐指数
1
解决办法
3185
查看次数

使用DataContractSerializer进行自定义序列化

我目前正在为我的DataSet使用包装类,以实现自定义序列化.我想使用DataContractSerializer(更像是必须使用它)但仍然支持自定义序列化.问题是,[DataContract][Serializable]属性似乎并没有很好地相处...我怎么能覆盖序列化,并支持BOTH DataContract和ISerializable序列化?包装器DataSet类的代码带到这里:

[Serializable()]    
[System.Runtime.InteropServices.ComVisible(false)]
public class TestDatasetWrapper : TestDataSet, ISerializable
{
    public TestDatasetWrapper()
        : base()
    {}

    protected TestDatasetWrapper(SerializationInfo info, StreamingContext context)
    {
        SerializationHelper.DeserializeTypedDataSet(info, this);
    }

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        SerializationHelper.AddTypedDataSetObjectData(info, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# serialization datacontract datacontractserializer

10
推荐指数
1
解决办法
8983
查看次数

自定义元素名称使用基元列表上的DataContractSerializer

我对使用DataContractSerializer使用基元列表时设置自定义元素名称的最佳方法感兴趣.假设我有以下类,其中包含一个字符串列表作为DataMember.

[DataContract]
public class ClassName
{
    [DataMember]
    public List<String> FieldName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,此序列化为以下内容:

<ClassName xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <FieldName xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:string>Value 1</a:string>
    <a:string>Value 2</a:string>
    <a:string>Value 3</a:string>
  </FieldName>
</ClassName>
Run Code Online (Sandbox Code Playgroud)

我想让XML尽可能简单地通过XSLT进行转换,所以理想情况下我会将标签重命名为更有用的东西,比如Value.

一种可能的解决方案是创建一个扩展Collection的类,并为CollectionDataMember参数设置ItemName,我在这里找到它.我想知道是否有办法实现相同的目标,而不需要这个额外的类或其他形式的包装类.XML序列化程序使用XMLArray和XMLArrayItem参数来完成此操作,但DataContractSerializer似乎没有类似的功能.

感谢您的任何提示或想法!

c# wcf xml-serialization datacontract datacontractserializer

10
推荐指数
2
解决办法
4491
查看次数

为什么在DataContract上调用Dispose,即使该服务仍然引用它?

我定义了以下DataContract实现IDisposable:

[DataContract]
public class RegularFileMetadata : FileMetadataBase, IDisposable
{
   bool _Disposed = false; //note this!

   //...

   protected virtual void Dispose(bool disposing)
   {
      if (!_Disposed)
      {
          //...
          _Disposed = true; //note this too!
      }
   }
   public void Dispose()
   {
      Dispose(true);
      GC.SuppressFinalize(this);
   }
}
Run Code Online (Sandbox Code Playgroud)

我调用以下服务方法传递上述数据协定的实例:

[OperationContract]
[ServiceKnownType(typeof(RegularFileMetadata))]
Guid BeginUpload(FileMetadataBase metadata);
Run Code Online (Sandbox Code Playgroud)

在实现中BeginUpload,我只是将字典中的元数据保存为:

Dictionary<Guid, RegularFileMetadata> _Dict;

public Guid BeginUpload(FileMetadataBase fileMetadata)
{
    //...
    var metadata = fileMetadata as RegularFileMetadata; 
    Guid sessionId = Guid.NewGuid();
    _Dict.Add(sessionId, metadata); //metadata SAVED! …
Run Code Online (Sandbox Code Playgroud)

c# wcf idisposable datacontract

10
推荐指数
1
解决办法
928
查看次数