【问题标题】:VB.NET syntax for Newtonsoft JsonProperty order propertyNewtonsoft JsonProperty 订单属性的 VB.NET 语法
【发布时间】:2018-05-08 17:24:42
【问题描述】:

我正在尝试设置各种 JSON 属性的序列化顺序,我能找到的所有示例都使用 C#,如下所示:

[JsonProperty(Order = 1)]

但我找不到在 Visual Studio 可以接受的 VB.NET 中编写此代码的方法 - 显而易见:

<JsonProperty(Order = 1)>  

给出错误并且不会编译....(毫无疑问,有一种方法可以格式化最后一行,但是...)

因为我还需要为同一属性设置属性名称,例如

[JsonProperty(PropertyName = "CardCode")]

在c#中,如何使用JsonPropertyAttribute在vb.net中设置名称和顺序?

【问题讨论】:

  • <JsonProperty(Order := 1)> Public Property MyProperty as MyType。你可以在Deserializing JSON in Visual Basic .NET 和链接的小提琴dotnetfiddle.net/9Sw9Sw 看到一个例子。如果您需要更多帮助,可以分享您当前的代码吗?
  • 谢谢 - 至少可以编译!无论它是否完成这项工作,我们都将在适当的时候看到...... :) 由于此类中的属性还需要另一个 jsonproperty(名称,以将它们链接到我(反)序列化到/来自的 .NET 数据类,有趣的是,要同时使用两者,我需要使用一个续行字符,例如: _ Public Property CardCode As String 尽管将它们放在同一行并不工作!哦,好吧...
  • 哦,不——说得太早了! VS 在尝试编译之前没有显示语法错误,然后它不喜欢继续字符,除非它前面有一个空格(足够公平),但是然后将一个放入下一行会产生语法错误(第二个 jsonproperty.. ...啊!
  • 所以他们一起去,k 所以:
  • 是的,没错。每个属性只能有一个JsonProperty 属性,但可以设置多个值。

标签: vb.net json.net


【解决方案1】:

中使用参数应用属性的语法在Attributes overview (Visual Basic): Attribute Parameters 中描述:

属性参数

许多属性都有参数,可以是位置的、未命名的或命名的。任何位置参数都必须按一定顺序指定,不能省略;命名参数是可选的,可以按任意顺序指定。首先指定位置参数。例如,这三个属性是等价的:

<DllImport("user32.dll")>  
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>  
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>

因此,如果要将JsonPropertyAttribute 应用于属性并设置名称和顺序,则必须这样做:

Public Class Card
    <JsonProperty(PropertyName:="CardName", Order:=2)>
    Public Property Name As String

    <JsonProperty(PropertyName:="CardDescription", Order:=3, _
            NullValueHandling := NullValueHandling.Ignore, DefaultValueHandling := DefaultValueHandling.IgnoreAndPopulate)>
    <System.ComponentModel.DefaultValue("")>
    Public Property Description As String

    <JsonProperty(PropertyName:="CardCode", Order:=1)>
    Public Property Code As String
End Class

注意事项:

  • source code 中的AllowMultiple = false 设置所示,JsonPropertyAttribute 的一个实例只能应用于给定成员或参数:

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false)]
    public sealed class JsonPropertyAttribute : Attribute
    {
         // Contents of the type omitted
    }
    

    因此,所有必要的JsonPropertyAttribute 设置都必须在该属性中进行初始化。

  • 行继续符_ 可用于跨多行中断属性设置。但是,属性可以应用于属性之前的行,因此在这种情况下没有必要使用它。

  • 根据JSON standard,JSON 对象是名称/值对的无序集合,因此通常不需要指定顺序。

VB.NET fiddle 示例here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多