我有一个通用类说
public class Generic<T>
{
public T Data {get; set;}
}
假设我有一个匿名对象,比如
var r1 = new {
A = lstA,
validation = null as ValidationError
}
var r2 = new {
B = lstB,
validation = null as ValidationError
}
我分配如下
Generic<object> g1 = new Generic<object>
g1.Data = r1
Generic<object> g2 = new Generic<object>
g2.Data = r2
当我使用 JsonSerialize.Serialize (g1) 序列化 g1 以上时,我得到了输出
{
"Data":{
"A":[
{
}
],
"validation":null
}
}
{
"Data":{
"B":[
{
}
],
"validation":null
}
}
现在我通过将匿名 r1 分配给 g1.Data 实现了上述 JSON 格式。仅使用泛型是否可以实现上述 JSON 格式?
上述 JSON 格式中的名称“A”在每种情况下都不同。在一种情况下可以是“A”,在另一种情况下可以是“B”等等。
我尝试了上面的代码,并使用匿名类型和泛型实现了所需的 JSON 格式。想知道是否可以单独使用ibg泛型来实现上述JSON格式,或者有更好的方法吗?
我认为你不需要使用泛型。听起来您只是希望属性名称相同,无论该特定属性(和其他属性)是 A、B 还是 Elephant。
如果您必须使用动态对象,请考虑创建一个可以重命名属性的自定义合同解析器:https://www.newtonsoft.com/json/help/html/contractresolver.htm
或者,您可以只使用
Newtonsoft.Json中的
[JsonProperty(PropertyName = "YourName")]
属性。这是一个例子:
internal class SomethingA
{
[JsonProperty(PropertyName = "C")]
public IList<int> A { get; set; }
}
internal class SomethingB
{
[JsonProperty(PropertyName = "C")]
public IList<int> B { get; set; }
}
internal class Program
{
static void Main(string[] args)
{
var somethingA = new SomethingA { A = new List<int> { 1, 2 } };
var somethingB = new SomethingB { B = new List<int> { 3, 4 } };
var aSerialized = JsonConvert.SerializeObject(somethingA); // gives {"C":[1,2]}
var bSerialized = JsonConvert.SerializeObject(somethingB); // gives {"C":[3,4]}
}
}