首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >序列化时避免扩展链接对象

序列化时避免扩展链接对象
EN

Stack Overflow用户
提问于 2013-01-28 23:11:40
回答 1查看 48关注 0票数 0

我使用JSON.NET将一些c#对象序列化为JSON (然后写入文件)。

我的两个主要类是:

代码语言:javascript
运行
AI代码解释
复制
public class Reservoir {
    private Well[] mWells;

    public Well[] wells {
        get { return mWells; }
        set { mWells = value; }
    }
}

代码语言:javascript
运行
AI代码解释
复制
public Well() {
    private string mWellName;
    private double mY;
    private double mX;

    public string wellName {
        get { return mWellName; }
        set { mWellName = value; }
    }


    public double y {
        get { return mY; }
        set { mY = value; }
    }

    public double x {
        get { return mX; }
        set { mX = value; }
    }

    private Well[] mWellCorrelations;
}

问题是输出如下所示:

代码语言:javascript
运行
AI代码解释
复制
'{"wells":[{"wellName":"B-B10","y":217.04646503367468,"x":469.5776343820333,"wellCorrelations":[{"wellName":"B-B12","y":152.71005958395972,"x":459.02158140110026,"wellCorrelations":[{"wellName":"B-B13","y":475.0,"x":495.14804408905263,"wellCorrelations":[{"wellName":"B-B11","y":25.0,"x":50.0,"wellCorrelations":[]}

也就是说,每个井对象的关联井被扩展为对象本身,当存在大量关联对象时,这就成为一个严重的空间和时间问题。

我想我更喜欢这样的东西:

代码语言:javascript
运行
AI代码解释
复制
'{"wells":[{"wellName":"B-B10","y":217.04646503367468,"x":469.5776343820333,"wellCorrelations":[{"wellName":"B-B12"}], {"wellName":"B-B11","y":217.04646503367468,"x":469.5776343820333,"wellCorrelations":[{"wellName":"B-B13"}

即仅维护油井名称作为链接(假定其唯一)。

有没有办法用JSON.NET做到这一点?

您已经设置了

代码语言:javascript
运行
AI代码解释
复制
serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

但这并没有什么不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 00:30:32

您可以添加一个名为WellCorrelations的新只读属性,该属性只获取油井关联的名称,并在mWellCorrelations上添加一个JsonIngore属性,如下所示:

代码语言:javascript
运行
AI代码解释
复制
[JsonIgnore]
private Well[] mWellCorrelations;

public string[] WellCorrelations 
{ 
    get { return mWellCorrelations.Select(w => w.wellName).ToArray(); }
}

http://james.newtonking.com/projects/json/help/html/ReducingSerializedJSONSize.htm

这样,序列化程序将只序列化相关油井的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14572982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文