我想DataMember在我DataContract的一个中添加一个.我想知道DataMember如果没有更新其中一方,现有服务器和客户端将如何在新的情况下运行.
我记得有一种方法可以DataMember选择,但我想知道它是否适用于所有场景:
我正在使用typescript处理应用程序的UI.与此同时,其他人也在为我提供数据.我们就数据合同达成了一致意见,但是这个过程很容易出错,我不断从服务器获取无效的数据对象.所以我的问题是我可以使用typescript中定义的一些接口以某种方式验证动态对象(在运行时)吗?
这个问题是在2012年提出的,因此它不能重复检查一个对象是否在运行时使用 2015年提出的TypeScript实现了一个接口.
给定运营合同,例如:
[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) 我有一个类,我需要能够序列化到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) 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坐标以便它理解?
非常感谢
我正在测试一个接受DC类型参数的WCF服务方法,我的一些DC属性是List类型.我如何传递值,我在""中尝试过字符串,不接受,请参阅附带的截图.
附带的屏幕截图中的AdjReason是List类型.希望我对我的问题很清楚.
谢谢,阿达什
list datacontract wcftestclient visual-studio-2010 wcf-client
我使用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) 我目前正在为我的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)
谢谢!
我对使用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
我定义了以下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) datacontract ×10
c# ×5
wcf ×5
.net ×2
ajax ×1
asp.net-3.5 ×1
datamember ×1
f# ×1
idisposable ×1
isrequired ×1
json ×1
list ×1
serializable ×1
typescript ×1
validation ×1
wcf-client ×1
web-services ×1