Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对象模型持久化为JSON并将字典序列化为其值数组?_C#_Json_Json.net_Json Serialization - Fatal编程技术网

C# 如何将对象模型持久化为JSON并将字典序列化为其值数组?

C# 如何将对象模型持久化为JSON并将字典序列化为其值数组?,c#,json,json.net,json-serialization,C#,Json,Json.net,Json Serialization,但我希望最小化空间并将位置存储为数组: { "Name": "SP500", "Positions": { "AOS": { "Ticker": "AOS", "Size": 100, }, "ABT": { "Ticker": "ABT", "Size": 100, } } } 如何将此json保存并加载到我的对象模型中?使用以下方法

但我希望最小化空间并将位置存储为数组:

{
  "Name": "SP500",
  "Positions": {
        "AOS": {
          "Ticker": "AOS",
          "Size": 100,
        },
        "ABT": {
          "Ticker": "ABT",
          "Size": 100,
        }
    }
}
如何将此json保存并加载到我的对象模型中?

使用以下方法:

{
  "Name": "SP500",
  "Positions": 
  [
      {
        "Ticker": "AOS",
        "Size": 100,
      },
      {
        "Ticker": "ABT",
        "Size": 100,
      }
  ]
}
公共类公文包
{
公共字符串名称{get;set;}
公共列表位置{get;set;}
}
使用以下方法:

{
  "Name": "SP500",
  "Positions": 
  [
      {
        "Ticker": "AOS",
        "Size": 100,
      },
      {
        "Ticker": "ABT",
        "Size": 100,
      }
  ]
}
公共类公文包
{
公共字符串名称{get;set;}
公共列表位置{get;set;}
}

您可以将型号更改为:

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}
公共类公文包
{
公共字符串名称{get;set;}
公共列表位置{get;set;}
}

您可以将型号更改为:

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}
公共类公文包
{
公共字符串名称{get;set;}
公共列表位置{get;set;}
}

将公文包的对象模型更改为以下格式有什么问题吗?我想这会连载你想要的。您可能需要使用LINQ在列表中查找所需的对象。这也是假设始终存在唯一的Ticker

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}
公共类公文包
{
公共字符串名称{get;set;}
公共列表位置{get;set;}
}

将公文包的对象模型更改为以下格式有什么问题吗?我想这会连载你想要的。您可能需要使用LINQ在列表中查找所需的对象。这也是假设始终存在唯一的Ticker

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}
公共类公文包
{
公共字符串名称{get;set;}
公共列表位置{get;set;}
}
您可以添加一个for
字典,将字典值序列化为列表。转换器假定在反序列化过程中可以从字典值中提取字典键

首先,定义以下转换器:

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}
当然,转换器假定字典键和股票代码名称相同

演示小提琴。

您可以添加一个for
字典,将字典值序列化为列表。转换器假定在反序列化过程中可以从字典值中提取字典键

首先,定义以下转换器:

public class Portfolio
{
    public string Name {get; set;}
    public List<Position> Positions {get; set;}
}
当然,转换器假定字典键和股票代码名称相同


演示小提琴。

最简单的选择是编写一个单独的模型,用于序列化目的:

课程:

公共类公文包
{
公共字符串名称{get;set;}
公共字典位置{get;set;}
}
//这是一个仅用于序列化的类
公共类PortfolioForSerialization
{
公共字符串名称{get;set;}
公共位置[]位置{get;set;}
}
公共阶级地位
{
公共字符串标记器{get;set;}
公共十进制大小{get;set;}
}
用法:

//要使用的公文包类(dictionary属性)
var组合=新组合()
{
Name=“MyPortfolio”,
位置=新字典()
{
{“AOS”,new Position(){Size=10,Ticker=“AOS”},
{“ABT”,新位置(){Size=100,Ticker=“ABT”}
}
};
//仅用于序列化
var forSerialization=新的PortfolioForSerialization()
{
Name=portfolio.Name,
Positions=portfolio.Positions.Select(p=>p.Value).ToArray()
};
string serialized=JsonConvert.serialized对象(用于序列化);
//反序列化时,将数组映射回字典
var deserializedPortfolio=JsonConvert.DeserializeObject(序列化);
//将序列化模型映射回您的工作模型
var workingPortfolio=新投资组合()
{
Name=反序列化Portfolio.Name,
Positions=反序列化Portfolio.Positions.ToDictionary(k=>k.Ticker,v=>v)
};

否则,您将需要轻松地使用。

最简单的选项是编写一个用于序列化目的的单独模型:

课程:

公共类公文包
{
公共字符串名称{get;set;}
公共字典位置{get;set;}
}
//这是一个仅用于序列化的类
公共类PortfolioForSerialization
{
公共字符串名称{get;set;}
公共位置[]位置{get;set;}
}
公共阶级地位
{
公共字符串标记器{get;set;}
公共十进制大小{get;set;}
}
用法:

//要使用的公文包类(dictionary属性)
var组合=新组合()
{
Name=“MyPortfolio”,
位置=新字典()
{
{“AOS”,new Position(){Size=10,Ticker=“AOS”},
{“ABT”,新位置(){Size=100,Ticker=“ABT”}
}
};
//仅用于序列化
var forSerialization=新的PortfolioForSerialization()
{
Name=portfolio.Name,
Positions=portfolio.Positions.Select(p=>p.Value).ToArray()
};
string serialized=JsonConvert.serialized对象(用于序列化);
//反序列化时,将数组映射回字典
var deserializedPortfolio=JsonConvert.DeserializeObject(序列化);
//将序列化模型映射回您的工作模型
var workingPortfolio=新投资组合()
{
Name=反序列化Portfolio.Name,
Positions=反序列化Portfolio.Positions.ToDictionary(k=>k.Ticker,v=>v)
};

否则,您将需要使用。

我不想使用问题中所述的
列表
我想使用问题中所述的
字典
,我不想使用问题中所述的
列表
我想使用问题中所述的
字典
我不想使用问题中所述的
列表
我想使用问题中所述的
字典
“如我问题中所述”在哪里?我不想使用
列表
我想使用
词典
如我问题中所述”如我问题中所述“哪里?我不想使用
列表
我想使用问题中所述的
词典
我不想使用
列表
我想使用问题中所述的
词典
。”