如何在私人领域与供应序列化?

问题描述 投票:0回答:0

本代码,带有公共列表可用于序列化和挑战:

internal class PoSet<T> { public List<PossibleOutcome<T>> WeightedValues = new(); public PoSet() { } public PoSet(IEnumerable<PossibleOutcome<T>> weightedValues) { if (weightedValues == null) throw new ArgumentNullException(nameof(weightedValues)); WeightedValues.AddRange(weightedValues); } public void Add(PossibleOutcome<T> weightedValue) { if (weightedValue == null) throw new ArgumentNullException(nameof(weightedValue)); WeightedValues.Add(weightedValue); } }

...但是,此代码仅公开一个可读列表并使用JSON构造函数属性不适用于序列化,但不能用于进行序列化。我尝试了几个JSON属性变体:

internal class PoSet<T> { private List<PossibleOutcome<T>> _weightedValues = new(); public IReadOnlyList<PossibleOutcome<T>> WeightedValues => _weightedValues.AsReadOnly(); [JsonConstructor] public PoSet(List<PossibleOutcome<T>> weightedValues) //Constructor for the deserializer { if (weightedValues == null) throw new ArgumentNullException(nameof(weightedValues)); _weightedValues.AddRange(weightedValues); } public PoSet() { } public PoSet(IEnumerable<PossibleOutcome<T>> weightedValues) { if (weightedValues == null) throw new ArgumentNullException(nameof(weightedValues)); _weightedValues.AddRange(weightedValues); } public void Add(PossibleOutcome<T> weightedValue) { if (weightedValue == null) throw new ArgumentNullException(nameof(weightedValue)); _weightedValues.Add(weightedValue); } }

任何帮助的人都非常感谢。当然,这是可能的。我已经读过一些有关合同的信息,但这似乎超出了我的能力(这是爱好的东西;我不是真正的程序员)。
BTW如果有帮助,这是可能的类别:

// Generic WeightedValue class (for any type T) internal class PossibleOutcome<T> { public T Value { get; set; } public double Weight { get; set; } public PossibleOutcome() { } // Parameterless constructor for deserialization public PossibleOutcome(T value, double weight) { if (weight < 0) throw new ArgumentException("Weight cannot be negative.", nameof(weight)); Value = value; Weight = weight; } }
    

我认为您使用的库是system.text.json,因为json.net可以正常地对此类别化。 system.text.json的规则有些木制,它要求每个参数必须能够匹配属性(或字段),它们的名称和类型必须一致(名称是对案例不敏感的),因此您需要将参数类型更改为

JsonConstructor

.。
	
c# json-deserialization system.text.json private-members
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.