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)
};
否则,您将需要使用。我不想使用问题中所述的列表
我想使用问题中所述的字典
,我不想使用问题中所述的列表
我想使用问题中所述的字典
我不想使用问题中所述的列表
我想使用问题中所述的字典
“如我问题中所述”在哪里?我不想使用列表
我想使用词典
如我问题中所述”如我问题中所述“哪里?我不想使用列表
我想使用问题中所述的词典
我不想使用列表
我想使用问题中所述的词典
。”