Tag: 序列化

webapi2中DataMember和JsonProperty之间的区别

在webapi2中使用DataMember和JsonProperty有什么区别? 任何性能差异? 什么是首选使用? 谢谢! 安德烈亚斯

XML序列化可选属性的默认值

我有一组使用xsd.exe构建的类,我正在尝试序列化它们。 但是,生成的XML中不包含属性。 以下是问题所在的架构的一部分。 /* sequence removed for brevity */ xsd.exe在“Widget”类和另一个名为“VersionSpecified”的属性上生成了一个名为“Version”的属性,但是当我序列化时,即使设置为true,这似乎也不会生成属性: [XmlAttributeAttribute] [DefaultValueAttribute(Version.Version_1_1)] public Version Version { get; set; } [Serialization.XmlIgnoreAttribute] public bool VersionSpecified { get; set; } 这是它所基于的枚举: /// [GeneratedCodeAttribute(“xsd”, “2.0.50727.3038”)] [Serializable] public enum Version { [XmlEnumAttribute(“1.0”)] Version_1_0, [XmlEnumAttribute(“1.1”)] Version_1_1, } 根据请求的代码段 Widget widget = new Widget(); widget.Version = Version.Version_1_1; widget.VersionSpecified = true; XmlSerializer serializer […]

我是否需要在WCF DataContract中公开构造函数,以使其在客户端上的对象实例化期间工作?

我在WCF服务中有一个类,我们称之为A。 A是数据协定,其中包含另一个自定义对象B的集合作为其DataMembers之一。 为了避免客户端的Null引用问题,我在构造函数中实例化BList ,如下所示: [DataContract] public class A { [DataMember] public String name { get; set; } [DataMember] public List BList {get; set; } public A() { BList = new List(); } } 我的问题是在客户端上,在客户端上创建A的对象后,此实例化不会发生并且BList显示为null。 我猜测构造函数没有出现在客户端上。 那么,我是否需要使构造函数成为一个明确的操作契约? 如果是这样会使客户看到他们不应该看到的内部事物,对吧? 如何确保此实例化在客户端上发生? 谢谢,对不起,如果这看起来像一个愚蠢的问题。

C#无法将System.String转换或转换为Class对象

我试图反序列化从Web API收到的JSON字符串 try { string r = await App.client.GetUser(); App.Authentication = JsonConvert.DeserializeObject(r); await DisplayAlert(“TEST”, App.Authentication.ToString(), “OK”); Application.Current.MainPage = new Schedule(); } catch (Exception p) { await DisplayAlert(“Getting Authentication failed”, p.ToString(), “TEST”); } 但是它给出了错误:无法将System.String转换或转换为App1.ApiResult App.Authentication = JsonConvert.DeserializeObject(r); App.Authentication: public static ApiResult Authentication = new ApiResult();` JSON字符串: “\”{\\ “状态\\”:\\ “0 \\”,\\ “消息\\”:{\\ “ID \\”:5,\\ “姓\\”:\\”约翰\\”,\\ “名字\\”:\\ “李四\\”,\\ […]

带有属性的列表的XML序列化

我在另一个列表(具有变体的产品)中有一个列表。 我希望父列表上设置属性(只是一个id和一个name )。 期望的输出 1 foo bar 10 现行守则 [XmlRoot( ElementName = “embellishments”, IsNullable = false )] public class EmbellishmentGroup { [XmlArray(ElementName=”type”)] [XmlArrayItem(“row”, Type=typeof(Product))] public List List { get; set; } public EmbellishmentGroup() { List = new List(); List.Add( new Product() { Id = 1, Name = “foo bar”, Cost = 10m } ); } […]

将对象转换为generics类型

我有一段时间没有睡觉所以这可能比我想象的要容易。 我有一个或多或少的generics类: public class Reference where T : APIResource //<- APIResource is abstract btw { private T _value = null; public T value { get { return _value; } } } 在其他地方,在自定义序列化方法中,有人传入的object实际上是Reference一个实例。 我只想跳到每个Reference对象都有的“value”属性,所以我想去: string serialize(object o) { return base.serialize( ((Reference) o).value ); } 当然,生活并不那么简单,因为正如编译器所说: using the generic type “Reference” requires 1 type arguments 我怎么能做我想做的事?

如何自定义InitializeComponent的代码生成? 更具体地说,如何对所有生成的代码进行后处理?

我正在尝试为InitializeComponent自定义Windows窗体设计器的代码生成。 MSDN文章“在.NET Framework视觉设计器中自定义代码生成”包含“控制代码生成”部分 ,该部分解释了如何执行此操作的基础知识。 我在上面的文章中密切关注了一个例子: //using System.ComponentModel.Design.Serialization; class SomeFormSerializer : CodeDomSerializer { public override object Serialize(IDesignerSerializationManager manager, object value) { // first, let the default serializer do its work: var baseSerializer = (CodeDomSerializer)manager.GetSerializer( typeof(Form).BaseType, typeof(CodeDomSerializer)); object codeObject = baseSerializer.Serialize(manager, value); // then, modify the generated CodeDOM — add a comment as the 1st line: if […]

JSON.NET对具有Stream类型成员的对象进行序列化?

希望这是一个我忽略的简单修复。 我有一个对象传递到一个事件处理程序,我想使用JSON.NET序列化该对象,如下所示: public void OnEvent(IEventObject foo) { // Serialize foo to string/disk here? var data = JsonConvert.SerializeObject(foo, Formatting.Indented); } 似乎foo的一个或多个成员是流。 我已经认识到Streams不可序列化,因为它们是数据的抽象而不是数据本身。 这是有道理的。 我不知道如何序列化这个对象: a)将流转换为数据并将其序列化 b)忽略流并序列化其余成员 对此的一个重要警告是我无法访问IEventObject或其实现,因此我无法使用属性标记标记任何这些对象。 我提出的唯一解决方案是将此对象包装在我自己的类中,对其进行适当标记,然后对其进行序列化。 稍后我会反序列化回我自己的类,并将其转换为原始对象。 我不喜欢这种方法,因为它涉及额外的对象和转换步骤,并且如果可能的话希望避免它。

Json序列化字典的问题

每当我尝试序列化字典时,我都会得到exception: System.ArgumentException: Type ‘System.Collections.Generic.Dictionary`2[[Foo.DictionarySerializationTest+TestEnum, Foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]’ is not supported for serialization/deserialization of a dictionary, keys must be strings or object 我的测试用例是: public class DictionarySerializationTest { public enum TestEnum { A, B, C } //tried with numbers, too: public enum TestEnum { A = 1, B = 2, C = […]

Newtonsoft.Json自定义序列化日期

我正在使用Newtonsoft.Json将我的日期从C#序列化为javscript我想要做的是让json序列化程序使用当前文化将日期格式化为字符串 这是我的Json序列化器得到的: JsonConvert.SerializeObject(DateTime.Now); 结果是: “2016-07-08T17:10:17.6722753-05:00” 但我更喜欢的是: “08/07/2016 17:10:57” 因为我目前的文化是巴西,我希望我的日期以上述方式显示。 是否可以全局 (对于任何可能被序列化的日期)告诉Newtonsoft.Json中的json序列化程序使用它就像使用date.ToString() (因为ToString尊重System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat的文化System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat并相应地给出正确的格式)