VB.Net如何实现私有成员的序列化和反序列化?

2026-05-08 12:133阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计462个文字,预计阅读时间需要2分钟。

VB.Net如何实现私有成员的序列化和反序列化?

为了传输/克隆等目的,我需要序列化任何对象(到XML、JSON等)- 不需要过于复杂。我发现newtonsoft.json库非常简单,除了它没有序列化私有成员。我发现C#

为了传输/克隆等目的,我需要序列化任何对象(到xml,json,其他 – 不要太在意).

我发现newtonsoft.json库非常简单,除非它没有序列化私有成员.我发现c#中的例子似乎提供了我需要的合同,但是我无法让它们起作用.

我将很感激一个简单的例子:

VB.Net如何实现私有成员的序列化和反序列化?

例如

Class Person Private _NI as integer Public Name as string End Class

我需要两个功能:

Function SerializePerson(P as person) as string Function DeSerializePerson(SerializedText as string) as Person

理想情况下,我想要一种易于复制任何对象的方法.

Newtonsoft的技巧是更改JsonSerializerSettings并将它们传递给JsonConvert.SerializeObject.这个答案包含了这一变化的全部细节: stackoverflow.com/a/24107081/2019162

编辑

我没有想到链接代码在C#中,因为我经常在这两个方面工作.我很抱歉.我已翻译下面的代码:

Dim settings As New JsonSerializerSettings() With {.ContractResolver = New MyContractResolver()} Dim json As String = JsonConvert.SerializeObject(obj, settings)

合同解析员:

Imports System.Reflection Imports Newtonsoft.Json Imports Newtonsoft.Json.Serialization Public Class MyContractResolver Inherits DefaultContractResolver Protected Overrides Function CreateProperties(type As Type, memberSerialization As MemberSerialization) As IList(Of JsonProperty) Dim props = type.GetProperties(BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance). Select(Function(p) MyBase.CreateProperty(p, memberSerialization)). Union(type.GetFields(BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance). Select(Function(f) MyBase.CreateProperty(f, memberSerialization))).ToList() props.ForEach(Sub(p) p.Writable = True p.Readable = True End Sub) Return props End Function End Class

大多数代码转换器将C#Lambda更改为VB.NET中的Function(),但如果它们不需要返回类型,则应将它们转换为Sub().这可能是导致您的问题的原因.

本文共计462个文字,预计阅读时间需要2分钟。

VB.Net如何实现私有成员的序列化和反序列化?

为了传输/克隆等目的,我需要序列化任何对象(到XML、JSON等)- 不需要过于复杂。我发现newtonsoft.json库非常简单,除了它没有序列化私有成员。我发现C#

为了传输/克隆等目的,我需要序列化任何对象(到xml,json,其他 – 不要太在意).

我发现newtonsoft.json库非常简单,除非它没有序列化私有成员.我发现c#中的例子似乎提供了我需要的合同,但是我无法让它们起作用.

我将很感激一个简单的例子:

VB.Net如何实现私有成员的序列化和反序列化?

例如

Class Person Private _NI as integer Public Name as string End Class

我需要两个功能:

Function SerializePerson(P as person) as string Function DeSerializePerson(SerializedText as string) as Person

理想情况下,我想要一种易于复制任何对象的方法.

Newtonsoft的技巧是更改JsonSerializerSettings并将它们传递给JsonConvert.SerializeObject.这个答案包含了这一变化的全部细节: stackoverflow.com/a/24107081/2019162

编辑

我没有想到链接代码在C#中,因为我经常在这两个方面工作.我很抱歉.我已翻译下面的代码:

Dim settings As New JsonSerializerSettings() With {.ContractResolver = New MyContractResolver()} Dim json As String = JsonConvert.SerializeObject(obj, settings)

合同解析员:

Imports System.Reflection Imports Newtonsoft.Json Imports Newtonsoft.Json.Serialization Public Class MyContractResolver Inherits DefaultContractResolver Protected Overrides Function CreateProperties(type As Type, memberSerialization As MemberSerialization) As IList(Of JsonProperty) Dim props = type.GetProperties(BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance). Select(Function(p) MyBase.CreateProperty(p, memberSerialization)). Union(type.GetFields(BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance). Select(Function(f) MyBase.CreateProperty(f, memberSerialization))).ToList() props.ForEach(Sub(p) p.Writable = True p.Readable = True End Sub) Return props End Function End Class

大多数代码转换器将C#Lambda更改为VB.NET中的Function(),但如果它们不需要返回类型,则应将它们转换为Sub().这可能是导致您的问题的原因.