如何将 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,其中一个数组项属性值设置为对另一个项的引用的主要内容,如果未能解决你的问题,请参考以下文章

C#如何将OBJECT转换成数组

如何将 c# 二维数组转换为 JSON 对象?

将 json 转换为 C# 数组?

如何将c#中的List转换为javascript中的数组并检查数组项

如何将 json 对象键转换为不同的数组来删除重复项

如何通过其中的键将一个深度json转换为多个深度?