如何将 c# 数组转换为 JSON,其中一个数组项属性值设置为对另一个项的引用
Posted
技术标签:
【中文标题】如何将 c# 数组转换为 JSON,其中一个数组项属性值设置为对另一个项的引用【英文标题】:How to convert c# arrays to JSON with one array item propety value set as reference to item from another 【发布时间】:2013-11-26 00:40:16 【问题描述】:要将 Java 脚本数组正确绑定到 AngularJs 视图,我需要它们如下所示:
var ingridients = [
name: 'Vodka',
name: 'Gin',
name: 'Rum'
];
var drinks = [
name: 'Bloody Mary', basicIngridient: ingridients[0],
name: 'Gin & Tonic', basicIngridient: ingridients[1],
name: 'Daiquiry', basicIngridient: ingridients[2]
];
假设我有像这样的 c# 数组:
class Drink
public string Name get; set;
public Ingridient BasicIngridient get; set;
class Ingridient
public string Name get; set;
static Ingridient[] ingridients = new Ingridient[]
new Ingridient Name = "Vodka" ,
new Ingridient Name = "Gin" ,
new Ingridient Name = "Rum"
;
Drink[] drinks = new Drink[]
new Drink Name = "Bloody Mary", BasicIngridient = ingridients[0],
new Drink Name = "Gin & Tonic", BasicIngridient = ingridients[1],
new Drink Name = "Daiquiri", BasicIngridient = ingridients[2]
;
问题是:如何转换这些 C# 数组以获得所需的 JSON 数组? 我知道 JSON。 Net 库,但我没有设法在文档中找到解决方案。
【问题讨论】:
【参考方案1】:试试javascripserializer 类
var json = new javascriptSerializer().Serialize(drinks);
Console.WriteLine(json);
【讨论】:
不幸的是它不考虑数组索引结果 JSON 将是:["Name":"Bloody Mary","BasicIngidient":"Name":"Vodka", etc.
但我需要它:["Name":"Bloody Mary","BasicIngidient":ingridients[0], etc.
如果我正确理解了您的评论,您希望它与引用而不是值一起使用吗? Json.NET 有PreserveReferencesHandling,更多的是here,这有点你所描述的,但不完全是。我认为您不能完全按照您的描述进行操作。
@WhiteKnight JSON 不支持这样的引用。它只是一种数据格式;不是代码。您可以获得的最接近的是输出代码字符串"BasicIngidient": "ingridients[0]"
,然后您必须在JSON.parse()
之后自行解析/评估。或者,将属性单独设置为索引basicIngridient: 0
,稍后再引用ingridients[this.basicIngridient]
。
@WhiteKnight 我没有注意到您需要的数组索引。正如 JonathanLonowski 所说,JSON 不是代码。
@Jonathan Lonowski 谢谢,看来我不明白 JSON 的主要传输角色。问题已结束;以上是关于如何将 c# 数组转换为 JSON,其中一个数组项属性值设置为对另一个项的引用的主要内容,如果未能解决你的问题,请参考以下文章