json.net需要将我的类属性转换为
我有以下两门课json.net需要将我的类属性转换为,.net,json,.net,Json,我有以下两门课 public class Foo { public Bar Args { get; set; } public Foo() { Args = new Bar(); } } public class Bar { public string Name { get; set; } public int Age { get; set; } } 使用时: var foo = new Foo(); foo.Args.Nam
public class Foo
{
public Bar Args { get; set; }
public Foo()
{
Args = new Bar();
}
}
public class Bar
{
public string Name { get; set; }
public int Age { get; set; }
}
使用时:
var foo = new Foo();
foo.Args.Name = "Mikael";
foo.Args.Age = 12;
string o = JsonConvert.SerializeObject(foo);
Console.WriteLine(o);
我得到以下json:
{"Args":{"Name":"Mikael","Age":12}}
我想这有点正确。。。但我将其发送到的另一端希望Args是一个数组,因此它需要如下所示:
{"Args":[{"Name":"Mikael","Age":12}]}
否则,它将Args视为单个对象而不是数组
这可以用吗?只需将
Args
属性更改为条的数组
:
public class Foo
{
public Bar[] Args { get; set; }
}
var foo = new Foo();
foo.Args = new Bar[] { new Bar {Name = "Mikael", Age = 12}};
string o = JsonConvert.SerializeObject(foo);
Console.WriteLine(o);
这是一个多么简单的解决方案啊。我喜欢它。我没想过。如果有一个更优雅的带有属性或SerializerSettings的解决方案,这个问题仍然没有解决。@Syska不想为这个答案辩护,但还有一点:带有属性等的解决方案可能可移植到另一种序列化程序,也可能不可移植到另一种序列化程序。因此,如果您想保持自由选择序列化程序的自由,您需要按照消费者希望的方式构造对象。你可以通过改变它(@scottm的答案)或包装它(我的答案)来做到这一点,我对此感到敬畏。这就是为什么我还写了“属性或序列化设置”。对于属性,我将依赖于Json.NET,但对于另一个,我将拥有自由,其他人可以按照自己的意愿序列化。使用者希望Args作为数组。但在这种情况下,我看不出消费产品为什么要将其作为数组。但是这似乎是一种固溶体。首先,我认为json反序列化程序有一个bug,但这是我的代码:-(。我认为最正确的答案是Eugen Rieck,这样可以保持我的模型干净。但仍然是非常简单的答案。
public class FooWrapper
{
private Foo myfoo;
public Bar[] Args { get {
Bar[] bar=new Bar[1]();
bar[0]=myfoo.Bar;
return bar;
}}
public FooWrapper(Foo foo)
{
myfoo=foo;
}
}
var foo = new Foo();
foo.Args.Name = "Mikael";
foo.Args.Age = 12;
string o = JsonConvert.SerializeObject(new FooWrapper(foo));
Console.WriteLine(o);