【问题标题】:C# How to set JsonProperty multiple names?C#如何设置JsonProperty多个名称?
【发布时间】:2015-10-27 19:23:39
【问题描述】:
 [XmlElement("A", Type = typeof(MyModelA)), XmlElement("B", Type = typeof(MyModelB))]
 public List<object> context{ get; set; }

可以工作,但我想更改为 JsonProperty ,像这样

 [JsonProperty("A", ItemConverterType = typeof(MyModelA)), JsonProperty("B", ItemConverterType = typeof(MyModelB))]
 public List<object> context{ get; set; }

失败了,怎么办?

{
  node:{
         A:{ MyModelA }
         B:{ MyModelB }
       }
}

【问题讨论】:

标签: c# .net json xml json.net


【解决方案1】:

您需要使用属性 JsonExtensionData。试试这个:

public sealed class ModuleA
{
    public string Foo { get; set; }
}
public sealed class ModuleB
{
    public string Boo { get; set; }
}
public class Node
{
    [JsonExtensionData]
    public Dictionary<string, JToken> Context { get; set; }
}
public class Example
{
    public Node Node { get; set; }
}

var moduleA = new ModuleA {Foo = "Hello from Module A"};
var moduleB = new ModuleB { Boo = "Hello from Module B" };
var example = new Example
        {
            Node = new Node
            {
                Context = new Dictionary<string, JToken>
                {
                    {"A", JToken.FromObject(moduleA)},
                    {"B", JToken.FromObject(moduleB)}
                }
            }
        };        

结果:

{
"Node": {
    "A": {
        "Foo": "Hello from Module A"
    },
    "B": {
        "Boo": "Hello from Module B"
    }
}}

【讨论】:

  • 当有多个相同类型的实例时,这是行不通的;你会得到一个 ArgumentException 试图向字典中添加一个重复的键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多